Pointer bei AtMega128

Gast #238656
Hallo,

ich hab (denke ich) ein Pointer-Problem beim AtMega 128.
Dieses ist erst aufgetreten nachdem das Programm größer geworden ist.
Ich arbeite hierbei mit Pointern auf Funktion, Konstanten im Flash und
auch Pointern im RAM.
Mit folgendem hab ich mir die Größe der Pointer anzeigen lassen:

volatile unsigned char (*funktion)(char daten);
volatile int  k = sizeof(PGM_P);
volatile int  l = sizeof(char *);
volatile int m = sizeof(funktion);

Die Größe ergibt immer 2 Bytes.
Müssten nicht der Funktionspointer under PROGMEM Pointer 4 Byte groß
sein?
Ich denke meine Probleme haben eingesetzt als die Proggröße über 64K
stieg.
Wenns daran liegt, wie bekommt man die Pointer größer?

Grüße
Stefan
Gast
Auf die Idee bin ich durch die Doku gekommen:

#define pgm_read_byte_far(address_long)
__ELPM((uint32_t)(address_long))
Read a byte from the program space with a 32-bit (far) address.
Note:
    The address is a byte address. The address is in the program space
Gast
Ich habe freilich den Eindruck gewonnen, dass WinAVR die Daten deshalb
im ROM vorne plaziert, den Code dahinter. Probleme sind also erst zu
erwarten, wenn man mehr als 64KB Daten im ROM liegen hat.
Moderator Persönliche Seite
> Ich habe freilich den Eindruck gewonnen, dass WinAVR die Daten
> deshalb im ROM vorne plaziert, den Code dahinter.

Das ist exakt der Grund, warum AVR-GCC (bzw. die Linkerscripte) das in
dieser Reihenfolge erledigen, richtig.  Die Initialisierungswerte der
Variablen dagegen landen hinter dem Code, aber die Init-Routine weiß
mit RAMPZ und ELPM umzugehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.