Forum: Mikrocontroller und Digitale Elektronik PIC: CCS Compiler - write-program memory


von Christian J. (Gast)


Lesenswert?

Hallo,

hat sich schonmal jemand mit dem Befehl aus dem HAL 
"write_program_memory(adresse,quelle,anzahl) auseinander gesetzt?

Ich habe gestern mit einem 18F4680 (65kb Flash) damit herumgespielt und 
den Flash Speicher zurückgelesen ob er richtig arbeitet.

Was der Befehl kann:

Er schreibt an jede beliebige gerade und ungerade Adresse einen bis zu 
256 Bytes langen Satz Daten ins Flash.

Was ich noch nicht verstehe ist folgendes:

-Das Flash ist doch 16 Bit organisiert beim 18F4680, also kann ein 
Zugriff imer nur 16 Bit lesen, oder?

Ist es so?

0x0000 = 0x1234
0x0001 = 0x2345

oder so:

0x0000 = 0x1234
0x0002 = 0x5678

-Das Flash ist 64 Bytes schreibar und löschbar, es kann immer nur an 
einer Blockgrenze angefangen werden und immer nur 64 Bytes auf einmmal.

-Das Flash muss vor dem Beschreiben gelöscht werden.

Wie schafft diese Funktion also das was sie kann? Ich bin da wirklich 
erstaunt?

Gruss,
Christian

von Peter D. (peda)


Lesenswert?

Christian J. wrote:
> -Das Flash ist 64 Bytes schreibar und löschbar, es kann immer nur an
> einer Blockgrenze angefangen werden und immer nur 64 Bytes auf einmmal.
>
> -Das Flash muss vor dem Beschreiben gelöscht werden.
>
> Wie schafft diese Funktion also das was sie kann? Ich bin da wirklich
> erstaunt?

Wie würdest Du denn so eine Funktion schreiben?

Man liest einen 64Byte-Block in einen Puffer im SRAM aus, ändert die 
Bytes, die geändert werden sollen, löscht den Flashblock und schreibt 
den Puffer wieder zurück.

Bibliotheksfunktionen sind ganz normale Programme, die mal einer 
geschrieben hat.

Du kannst ja mal nach dem Funktionsaufruf den Daten-Stack auslesen, da 
muß irgendwo der letzte geschriebene 64Byte-Block drinstehen.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.