Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Wieviele 16Bit Werte passen in ein Flashsegment? Kategorie: Programmierung (von André H. - 9.04.2008 10:12)
Als Antwort auf Wieviele 16Bit Werte passen in ein Flashsegment? von Daniel N. - 8.04.2008 14:27
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Daniel,

> Wieviele 16Bit Werte kann man in einem Flashsegment
> abspeichern?
>
> Ein Segment ist 64kByte groÃ?.
> 64*1024*8 / 16 = 32768.
> Das würde bedeuten es ist Platz für 32768 16Bit Werte.
>
> Nun kann man aber nur jede gerade bzw. zweite Adresse des
> Flashs benutzen.
> Bedeutet das also man kann nur 16384 16Bit Werte
> in einem Segment ablegen?

Du machst hier leider einen Denkfehler.
Der Flash wird zwar Wordweise benutzt, jedoch bezieht sich die Adresse immer auf die Byteadresse.
Der ASM-Treiber maskiert automatisch das Bit 0 aus, so daÃ? ein Versuch, z.B. auf
(Byte-)Adresse 3 zu speichern, automatisch dazu führt, da� ab (Byte-)Adresse 2 gespeichet wird.
Deshalb darf man beim Schreiben nur mit geraden Byte-Adressen arbeiten.
Ein Segment hat 64kB, also 65536Byte.
Diese können auch zu 100% genutzt werden.
Nur muÃ? die kleinste zu speichernde Datenmenge aus 2 Byte bestehen, was
z.B. einem Integer entspricht.(Oder einem Bytearray mit zwei Elementen...)
Wie Du die 64kB mit Daten belegst, ist Dir überlassen.
Wenn alles Integerwerte sein sollen, kannst Du natürlich 32768 dieser Werte pro
Segment speichern.

Um das zu testen, kannst Du das ganze Flash beschreiben und wieder auslesen:

const Segment=1;

thread main
{long i;
 hwcom.setspeed(8);
 hwcom.clr();
 hwcom.print("12Flash-Test:1310");
 hwcom.print("Lösche Flash Segment ");
 hwcom.put(Segment+0x30);
 hwcom.print(" ... ");
 flash.DelSeg(Segment);
 hwcom.print("fertig1310");

 for i=0...65534 step 2
 {
  flash.writeInt(Segment,i,i shr 1);
  if (i%62)==0 {hwcom.print("13schreibe ... ");hwcom.num(i);}
 }
 hwcom.print("1310fertig13101310");
 hwcom.print("Lese Flash:1310");
 for i=0...65534 step 2
 {
  hwcom.num(i);
  hwcom.put(':');
  hwcom.num(flash.readInt(Segment,i));
  hwcom.ret();
 }

 quit 1;
}

Das Programm kann etwas dauern, da das Speichern von Einzelwerten gegenüber
Arrays deutlich langsamer ist.
Auch die Ausgabe über RS232 bremst gewaltig.
Daher wird beim Schreiben nur alle 31 Durchläufe der Status ausgegeben.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Wieviele 16Bit Werte passen in ein Flashsegment? (von Daniel N. - 9.04.2008 10:51)