Hallo, leider muss ich diese Frage hier posten. Ich muss wohl zugeben das ich irgendwo eine Wissenlücke habe bei PROGMEM und Zeiger. Ich hoffe jemand kann meine Wissenslücke schliessen. const unsigned char tabelle1[] PROGMEM = {0x01 , 0x08 , 0x07}; const unsigned char tabelle2[] PROGMEM = {0xFF , 0xFE , 0xFA}; unsigned char a; unsigned char i; unsigned char f; PGM_P table[2] PROGMEM = {tabelle1, tabelle2}; int main(void) { i=0; f=2; a = pgm_read_byte(&table[0][2]); } Der Code funktioniert und ich kriege die richtigen Daten. Tausche ich aber die Zeile gegen die folgende Zeile aus kriege ich immer falsche Werte. Muss ich mit strcmp_P arbeiten oder wo mache ich den Fehler? a = pgm_read_byte(&table[i][f]); Gruß, Dirk
Hi, tut mir leid das verstehe ich nicht ganz. Wieso muss ich erst 2 Byte einlesen und zwischenspeichern damit ich dann auf den Wert zugreifen kann. Wieso kann ich nicht direkt die Zahlen gegen Variablen austauschen? Ich wünsche keinen fertigen Code, sondern mehr eine Erklaerung zum Problem. Ich würde gerne die Problematik verstehen. Wenn ich die Daten nicht im Flash ablege funktioniert es. Ich habe mit GCC auf dem PC getestet, deshalb vermute ich das ich irgendwo ein Fehler beim PROGMEM mache. Ich würde mich über eine Erklärung freuen. Gruß, Dirk
table[i] ist ein Speicherzugriff. Auf RAM. Das Array steht im ROM. Kannst natürlich auch pgm_read_byte(&((irgendein typecast)pgm_read_word(&table[i]))[f]); schreiben, wenn Du das übersichtlicher findest. Mit Konstanten geht es, weil der Compiler bei eingeschalteter Optimierung den Zugriff auf table[i] wegoptimiert. Schalte mal die Optimierung aus, dann geht's wieder nicht.
Hi, danke schoen fuer die Erklaerung. Einige Probleme werden mir nun klarer. Gruß, Dirk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.