Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > 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: > <code> > const Segment=1; > > thread main > {long i; > hwcom.setspeed(8); > hwcom.clr(); > hwcom.print("\12Flash-Test:\13\10"); > hwcom.print("Lösche Flash Segment "); > hwcom.put(Segment+0x30); > hwcom.print(" ... "); > flash.DelSeg(Segment); > hwcom.print("fertig\13\10"); > > 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("\13\10fertig\13\10\13\10"); > hwcom.print("Lese Flash:\13\10"); > for i=0...65534 step 2 > { > hwcom.num(i); > hwcom.put(':'); > hwcom.num(flash.readInt(Segment,i)); > hwcom.ret(); > } > > quit 1; > } > </code> > 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.