Gast
#182745
Hallo Leute,
ich habe folgende Situation: ein AVR90S4433 mit angeschlossenem LCD und
UART. Ich habe mir die LCD-Libary selbst zusammengebaut, fürs UART nehme
ich die von Fleury.
Zum testen meiner LCD-Libary erstelle ich 8 Variablen vom Typ lcdchar
(definition siehe weiter unten) in die ich 8 Custom-Chars speichere.
Diese werden dann ans LCD geschickt. Außerdem gebe ich noch einige Text
und eben diese 8 Chars aus.
Zum testen der UART-Funktionen benutze ich den uart_test.c Code der der
Libary beiligt.
Die beiden Teile funktionieren wenn ich sie alleine Benutze problemlos.
Versuche ich aber sowohl die Zeichen an das LCD zu senden alsauch das
UART-Echo laufen zu lassen kommt es zu großen Problemen:
- Es werden nurnoch wenige Zeichen auf dem LCD ausgegeben, der MC
verschluckt also Zeichen.
- das UARRT-Echo spinnt auch rum, es wird nicht einfach der letzte
Buschstaben zurückgegeben sondern manchmal auch die letzten x getippten
Buchstaben, außerdem kommt es zu overruns.
Nach langem rumprobieren habe ich festgestellt woran es liegt:
Irgendwie scheine ich zuviel Speicher zu brauchen.
Erstelle ich nämlich nicht erst die 8 Customchars und sende sie dann an
das Display, sondern erstell ich nur eine Variable für alle 8 und
schreibe immer nach dem Setzten auf das Display, dann funktioniert es
PRoblemlos.
Code:
typedef struct {
uint8_t line0;
uint8_t line1;
uint8_t line2;
uint8_t line3;
uint8_t line4;
uint8_t line5;
uint8_t line6;
uint8_t line7;
} lcdchar;
=============================================================
Funktioniert nicht:
lcdchar c1;
c1.line0 = 0b00000000;
c1.line1 = 0b00000000;
c1.line2 = 0b00000000;
c1.line3 = 0b00000001;
c1.line4 = 0b00000011;
c1.line5 = 0b00000111;
c1.line6 = 0b00001111;
c1.line7 = 0b00011111;
lcdchar c2;
c2.line0 = 0b00000000;
c2.line1 = 0b00000000;
c2.line2 = 0b00000000;
c2.line3 = 0b00000001;
c2.line4 = 0b00000011;
c2.line5 = 0b00000111;
c2.line6 = 0b00001111;
c2.line7 = 0b00011111;
... das gleiche bis c8 und dann
lcd_setchar(3,0,c1);
lcd_setchar(3,0,c2);
lcd_setchar(3,0,c3);
.. bis c8
=============================================================
Funktioniert:
lcdchar c1;
c1.line0 = 0b00000000;
c1.line1 = 0b00000000;
c1.line2 = 0b00000000;
c1.line3 = 0b00000001;
c1.line4 = 0b00000011;
c1.line5 = 0b00000111;
c1.line6 = 0b00001111;
c1.line7 = 0b00011111;
lcd_setchar(3,0,c1);
c1.line0 = 0b00000000;
c1.line1 = 0b00000000;
c1.line2 = 0b00000000;
c1.line3 = 0b00000001;
c1.line4 = 0b00000011;
c1.line5 = 0b00000111;
c1.line6 = 0b00001111;
c1.line7 = 0b00011111;
lcd_setchar(3,0,c1);
==========================================================
Meine Frage:
Bin ich an ein Speicherlimit gestoßen? Wieviele Variablen kann ich in C
erstellen? Gibt es da keine Meldung wenn ich zuviel Speicher brauche? Wo
liegt die Grenze? Könnte man die umgehen?
Danke für Hilfe
Martin