STRING AUS FLASH

OP #852087
Lesenswert?

Was läuft denn hier falsch, bekomme die Strings nicht aufs LCD
PROGMEM wird vom compiler ignogiert??


#define F_CPU 800000UL
#include <avr/io.h>
#include <util/delay.h>
#include <lcd.h>
#include <lcd.c>
#include <avr/pgmspace.h>

int main(void)
{
char lcdtext[] PROGMEM = "ZEILE 1";
char lcdtext1[] PROGMEM = "ZEILE 2";

lcd_init();

set_cursor(0,1);
lcd_string(lcdtext);
set_cursor(0,2);
lcd_string(lcdtext1);

while (PINB & (1 <<PB6)); // Wartet so lange wie pin6 high ist
           //  ..bei lo weiter
.....
}
#852105
Lesenswert?

lcdtext und lcdtext1 sind hier Pointer in den Flash-Speicher. C-Compiler 
sind auf eine Architektur ausgelegt, wo alles im RAM ist (von Neumann). 
Dagegen hat ein AVR eine Harvard-Architektur, und der C-Compiler kann 
Adressen ins Flash und ins RAM (EEPROM genauso) nicht von alleine 
unterscheiden.

Zum Lesen aus dem Flash bemüht man deshalb die Funktionen pgm_read_byte 
(liest 1 Byte) und pgm_read_word (2 Bytes), zu finden im Header 
<avr/pgmspace.h>

Deine lcd_string() Funktion wird wahrscheinlich einen String im RAM 
erwarten, du musst sie umschreiben.

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