Hallo zusammen!
Beim programmieren einer Anwendung für mein S65-Display bin ich auf einen seltsamen Fehler gestoßen.
Ich habe dazu ein neues kleines Programm geschrieben, um die Fehler einzuschränken.
Es geht die Globale Variabel "uint8wochentag". Hier der Code:
Der Prototyp textausgabe, greift auf den Inhalt der angegebene Flashaddresse zu und gibt diesen Wert zurück. Sprich bei:Code:uint8_t uint8wochentag = 0; const char arytext1[] PROGMEM = "M"; const char arytext2[] PROGMEM = "D"; PGM_P verweis[8] PROGMEM = { arytext1, arytext2 }; uint8_t textausgabe(PGM_P string) { uint8_t charZeichen = pgm_read_byte((string)); return charZeichen; } int main(void) { DDRD |= LED1; // Als Ausgang if(textausgabe(verweis[uint8wochentag]) == 77) { PORTD |= LED1; // Led aktivieren } }
gibt er "M" zurück. (da verweis auf arytext1[])Code:textausgabe(verweis[0])
Und bei:
gibt er "D" zurück. (da verweis auf arytext2[])Code:textausgabe(verweis[1])
Beides funktioniert soweit.
Über die globale Variabel uint8wochentag möchte ich nun festlegen, welcher Text ausgelesen wird. Sprich so:
Wenn die uint8wochentag == 0 ist, dann soll der Inhalt von arytext1 zurückgegeben (also der Buchstabe "M" bzw. "77" als ASCII). Wenn dies der Fall ist, dann wird die Led im oberen Code aktiviert.Code:textausgabe(verweis[uint8wochentag])
Obwohl ich global schon den Wert der Variabel zugewiesen habe:
Funktioniert es nicht. Ich muss in im Main-Proto der Variabel nochmal den Wert zuweisen (sprich: uint8wochentag = 0Code:uint8_t uint8wochentag = 0;und diese Wertzuweisung muss unmittelbar vor:
stehen. Befindet sich was dazwischen, dann geht es wieder nicht! Total komisch.Code:if(textausgabe(verweis[uint8wochentag]) == 77)![]()
Aber führe ich dieses aus, dann scheint es mit dem Zugriff auf die globale Variabel problemlos zu gehen:
Woran kann es liegen? Vielen Dank!Code:if(uint8wochentag == 0) { PORTD |= LED1; }







Zitieren

Lesezeichen