Hallo, ich kämpfe gerade mit meinen ? Anfängerproblemen ? Der Wert einer Variablen kann über ein mit I2C verbundenes LCD oder die UART ausgegeben werden - funktioniert soweit. Die fragliche Variable ist ein Eintrag in einem Feld volatile unsigned char Bg_ab_new[3]; Der Eintrag Bg_ab_new[2] - nur dieser Feld-Eintrag - macht Probleme. Im main() wird initialisiert und im main() über das LCD ausgegeben. Nicht 0, sondern 240 = 0xf0 erscheint! Initialisiere ich nochmal weiter unten, z.B. vor lcd_gotoxy(0, 0); wird tatsächlich zunächst 0 ausgegeben. int main(void) { Bg_ab_new[0] = 0; Bg_ab_new[1] = 0; Bg_ab_new[2] = 0; ports_init(); adc_init(); uart_init(); timer0_init(); i2c_init(); i2c_start(0x40); lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_gotoxy(0, 0); lcd_puts("Steuerung"); delay(1); lcd_gotoxy(0, 0); char str[6]; lcd_puts(ltoa(Bg_ab_new[2], str, 10)); sei(); for (;;) {} // loop forever } Im Folgenden wird die Variable über eine Timer-ISR ausgegeben: INTERRUPT(SIG_OVERFLOW0) // signal handler for Timer 0 overflow { lcd_gotoxy(0, 1); char str[6]; lcd_puts(ltoa(Bg_ab_new[2], str, 10)); } und - wer ahnt es schon - Bg_ab_new[2] ist wieder einmal 0xf0 geworden! Das Ergebnis ist das gleiche, egal ob ich über I2C/LCD oder über die UART ausgebe. Ich sollte noch erwähnen, daß an keiner weiteren Stelle im Programm auf diese Variable zugegriffen wird. Wem ist solches schon vorgekommen? Grüsse Roland
Ich hab ein ähnliches Problem. Bei mir wird ein const uint8_t array beim schreiben in ein anderes array auf 0 gesetzt. ich kann beeinflussen wieviele Elemente auf 0 gesetzt werden je nachdem wie viele Werte ich in das andere Array schreibe. Ist das bei dir der einzige Code? Mein programm ist schon mächtig voll geworden. Evtl. haben wir beide ein Speicherleck.. irgendwo.. MfG Steffen
Hi, bei mir konnte ich das Problem grad lösen indem ich die betroffene globale Variable als static deklariert hab. Gruß Steffen
My 2 cents: GCC sieht dass die routine "SIG_OVERFLOW" nie aufgerufen wird und "optimiert" die Variable als "nutzlos". Ich wuerde "aus Prinzip" alle Variablen die mit Interrupt Routinen etwas zu tun haben als "volatile" deklarieren. Regards, Richard Cape Town
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.