PIC: CCS Compiler - write-program memory

Gast #1061513
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
#1061558
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren