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);
Das Phänomen das sich Variablen ändern hatte ich auch mal mit dem NC308 (ist auch ganz plötzlich aufgetreten). Woran das gelegen hat kann ich Dir leider nicht sagen (evtl. eine Einstellung beim Kompilieren, Start-Up-Dateien,...?), jedenfalls konnte ich das "beheben" indem ich jede Variable mit irgendeinem Wert vorinitialisiert und Arrays mit einer geraden Anzahl von Bytes verwendet habe. Die Ursache würde mich auch mal interessieren. Ich hatte mich aus Zeitgründen noch nicht näher damit befasst.
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.