winavr, pgm_read_byte_far()

Jan 11, 2013 5 Replies

Moin,



wir haben hier ein Problem mit dem folgenden Programmschnipsel wenn wir das für einen ATmega32 compilieren. Das selbe Konstrukt setzen wir ohne Probleme bei einem ATmega128 ein:


-------------------------------------------------------------- #include #include #include #include


void LCD_printtxtfromflash(char line, char *FlashSTR) { uint8_t c=0; do { c = pgm_read_byte_far(FlashSTR++); if (c) LCD_printchar(line++,c); } while (c); }


----------------------------------------------------------------



Der compiler meldet:



lcd.h: In function 'LCD_printtxtfromflash': lcd.h:313: warning: implicit declaration of function 'pgm_read_byte_far'



und dann:



undefined reference to `pgm_read_byte_far'



Ich hab die pgmspace.h schon ins Projektverzeichnis kopiert, aber irgendwie komme ich nicht weiter.



Gruß



Stefan


Stefan schrieb:

Hallo,

das sieht danach aus als gibt es pgm_read_byte_far für den Processor nicht und man muß was anderes benutzten, z.B. pgm_read_byte_near oder pgm_read_byte oder wie auch immer das heißt für das dort benutzte Memory Modell.

Bye

Die findet er ja, aber die funktion ist nicht da(vermutlich weg #defined). Der mega32 hat weniger programmspeicher.... gibt's eine pgm_read_byte()? Probier' die.

Es gibt ein pgm_read_byte_near(). Das läßt sich compilieren, liefert aber nicht die gewünschten Daten. Ich muss mal prüfen, ob da an anderer Stelle noch was faul ist.

near würde Sinn machen, weil der atmega32 im Gegensatz zum atmega128 eben weniger als 64k Flash hat.

Stefan schrieb:

Hallo,

der Zeiger char *FlashSTR muß natürlich auch passend definiert sein.

Bye

Am 11.01.2013 15:38, schrieb Uwe Hercksen:

Ja, hab ich eh auf 16 Bit, liefert beim ATmega128 zwar ein warning, geht aber, aber vermutlich nur, solange mein Programm unter 64k bleibt.

Mit dem mega32 gehts jetzt auch mit pgm_read_byte(), pgm_read_byte_near() müsste ich noch testen

Danke erstmal

Gruß

Stefan

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required