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:
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
}
}
Der Prototyp textausgabe, greift auf den Inhalt der angegebene Flashaddresse zu und gibt diesen Wert zurück. Sprich bei:
Code:
textausgabe(verweis[0])
gibt er "M" zurück. (da verweis auf arytext1[])
Und bei:
Code:
textausgabe(verweis[1])
gibt er "D" zurück. (da verweis auf arytext2[])
Beides funktioniert soweit.
Über die globale Variabel uint8wochentag möchte ich nun festlegen, welcher Text ausgelesen wird. Sprich so:
Code:
textausgabe(verweis[uint8wochentag])
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.
Obwohl ich global schon den Wert der Variabel zugewiesen habe:
Code:
uint8_t uint8wochentag = 0;
Funktioniert es nicht. Ich muss in im Main-Proto der Variabel nochmal den Wert zuweisen (sprich: uint8wochentag = 0 und diese Wertzuweisung muss unmittelbar vor:
Code:
if(textausgabe(verweis[uint8wochentag]) == 77)
stehen. Befindet sich was dazwischen, dann geht es wieder nicht! Total komisch.
Aber führe ich dieses aus, dann scheint es mit dem Zugriff auf die globale Variabel problemlos zu gehen:
Code:
if(uint8wochentag == 0)
{
PORTD |= LED1;
}
Woran kann es liegen? Vielen Dank!
Lesezeichen