PIC: CCS Compiler - write-program memory

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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.