Gast
#148783
Die Software lief einwandfrei, dann habe ich versehentlich den Rebuild Butten beim NC30 Compiler gedrückt und seitdem geht (fast) garnichts mehr: Beim Lesen eines LM92 I2C Temperatursensors bleibt plötzlich alles hängen, das Lesen aus dem EEPROM funktioniert aber, und liefert sogar die richtigen Werte. Weiterhin hängt sich der uC beim Senden über den UART auf, hier ein Codeausschnitt. Message sendet einen mit Null termierten String über den UART. Nach jedem Byte wird ein Busyflag gesetzt, das in der UART Interruptroutine zurückgesetzt wird. Der erste Sendevorgang funktioniert, danach hängt der Controller, da das Busyflag anscheinend nicht zurückgesetzt wird. Lasse ich die zweite Message weg, hängt er daher bei der dritten. Hänge ich die erste und zweite Message direkt hintereinander, also ohne die LoadPic Routine geht es dagegen wieder. Weiterhin ändern sich Variablen von selbst: Am PC erscheint A01, so wie es auch sein sollte. Auf dem Display jedoch B55. PicMem ist eine Konstante und hat den Wert 16. Da PicNum 1 ist, so wie es auch am PC ausgegeben wird, müsste der Vergleich mit PicMem+1 wahr sein, und daher A01 auf dem Display erscheinen. Aber aus irgendeinem, mir unerklärlichen Grund hat sich der Wert PicNum plötzlich auf 55 geändert ! Und das obwohl dieser Wert nirgends in einem Interrupt vorkommt. Wenn ich alle LM92 und alle UART Routinen entferne funktioniert der Rest der Software (Menüstruktur usw.) fehlerfrei. Und das obwohl das Display controllerlos ist, der M16 also die Daten Interruptgesteuert ausgibt. Ich verstehe echt nicht mehr, wie sowas gehn kann... temps[0]=65; temps[1]=PicArea+48; temps[2]=PicNum+48; temps[3]=0; Message (temps); LoadPic(PicNum-1); temps[0]=66; temps[1]=PicArea+48; temps[2]=PicNum+48; temps[3]=0; Message (temps); if ((Panel.special==0)&&(Panel.Panelcon==0)) {if (PicNum<(PicsMem+1)) //Display PicNumber {ShowTXT6x8 (0, 13, "A"); DispBCD (0, 14, 2, PicNum);} else {ShowTXT6x8 (0, 13, "B"); DispBCD (0, 14, 2, PicNum-(PicsMem-MaxNum)); }} temps[0]=67; temps[1]=PicArea+48; temps[2]=PicNum+48; temps[3]=0; Message (temps);