mikrocontroller.net

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


Autor: Christian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.