Hallo Liebes Forum ich bin zum ersten mal hier wirklich tätig. hier mein Problem. Wenn ich mein C-Programm mit der Hardware zusammen debugge funktioniert alles einwandfrei. Wenn ich dann aber das Programm auf den Chip laden will, also den "run" button betätige. macht er das file und ladet es auf den Chip.Jedoch Springt der mir aus einer Schlaufe, einfach so. In der Schlaufe habe ich ein Switch_case. Manchmal macht er nur das erste Case mal auch noch das zweite oder dritte. Die Bediengung der Schlaufe wird nicht Verändert. for(i = 0; i < 6; i++) Die Frage ist. Wie kann ich das beheben. Am Sourcecode kann es nicht liegen. Es muss an den Einstellungen von MPLAB liegen. mein PICkit : Pic16f887 MPLAB X IDE : v1.97 kann mir jemand helfen. Danke im Voraus
Du musst das Schaltbild und das komplette Programm hier (als Dateianhang) reinstellen, sonst kann man nix dazu sagen. Gruss
Das darf ich leider nicht. Aus rechtlichen Gründen. Tut mir Leid Vielleicht hatte jemand das gleich Problem?
Im Debugmode wird wahrscheinlich nicht optimiert und im Runmode schon? Kannst du wenigstens den Ausschnitt mit deiner Schleife (ich nehme an dass meinst du mit 'Schlaufe') und der switch zeigen? lg Christopher
while(1) { if(taster) { unlock_A2 = 1; unlock_A3 = 1; for (i = 0; i < 6; i++) { switch(i) { case 0: unlock_A1 = 0; unlock_R3 = 0; ausgang1 = 1; relais3 = 1; Delay1ms(1000); opamp[i] = AN_messung(5); Ur[i] = AN_messung(4); break; case 1: unlock_R3 = 1; unlock_R2 = 0; relais2 = 1; Delay1ms(1000); opamp[i] = AN_messung(7); Ur[i] = AN_messung(1); break; case 2: unlock_R2 = 1; unlock_R1 = 0; relais1 = 1; Delay1ms(1000); opamp[i] = AN_messung(8); //8 Ur[i] = AN_messung(6); //6 break; case 3: unlock_R2 = 0; unlock_R1 = 1; unlock_A1 = 1; unlock_A2 = 0; relais2 = 1; ausgang2 = 1; Delay1ms(1000); opamp[i] = AN_messung(0); //0 Ur[i] = AN_messung(1); //1 break; case 4: unlock_R2 = 1; unlock_R1 = 0; relais1 = 1; Delay1ms(1000); opamp[i] = AN_messung(11); Ur[i] = AN_messung(6); break; case 5: unlock_A2 = 1; unlock_A3 = 0; ausgang3 = 1; Delay1ms(1000); opamp[i] = AN_messung(13); Ur[i] = AN_messung(6); break; } //r12 = (1000.0 * (Ur[i] - opamp[i])) / 220; //r12 = (1000.0 * opamp[i]) / r12; if (Ur[i] == 0) { widerstand[i] = 1200000; } else { widerstand[i] = ((float)opamp[i] / Ur[i]) * 220; } /*if((widerstand[i] == 0) & (Ur[i] == 0)) { widerstand[i] = 1200000; }*/ // widerstand[i] = widerstand[i] * 1; // printf("%i",i); //r12 = widerstand[i]; //fconv(0.123,3,str);printf("\nopamp%i: %i\n",i,opamp[i]); printf("\nopamp%i: %d\n",i,opamp[i]); printf("ur%i: %d",i,Ur[i]); printf("\nR%i: %d",i,widerstand[i]); printf("\n"); }
es springt meistens nach der Ausgabe der ersten Messung. aus der for Schlaufe. manchmal auch nach der zweiten oder dritten Case
Wie Christopher schon gesagt hat: Das klingt sehr nach einem Optimierungsproblem des Compilers. Hatte das selber schon mit verschiedenen anderen Compilern (für andere uCs, PC). Ich würde folgendes machen, falls möglich: 1) Such in den Build-Settings ob es da irgendwo die Optimierungseinstellungen gibt. 2) Schalte alle Optimierungen ab, probier es aus ob Dein Code funktioniert. 3) Falls es verschiedene Varianten der Optimierung (Stärke der Optimierung oder auch Typ der Optimierung [Geschwindigkeit, Speicherverbrauch,...] gibt) versuche die Kombinationen aus und schau an ob der Code funktioniert oder nicht. 4) Vergleiche den Assemblercode von einem funktionierendem Programm mit einem nicht funktionierendem (Zumindest die Teile die Du als nicht funktionierend identifiziert hast). 5) Schreib eine Beschwerdeemail an den Compilerhersteller mit genauer Fehlerbeschreibung ;) 6) Finde einen Workaround/verwende die funktionierende Einstellung (falls vorhanden) Ich hoffe das hilft Dir weiter. PS: Deklarierst & initialisierst Du ALLE Variablen??? Das könnte auch ein Unterschied zwischen Debug (ev. automatische Initialisierung durch Debugger) und aus dem EEPROM laufen sein. lg Markus
Simon Steiner schrieb: > Am Sourcecode kann es nicht liegen. Es muss an den Einstellungen von > MPLAB liegen. Einfach köstlich. Frei nach dem Motto: 'Der Baum kam direkt auf mich zu ...'
@Markus Mein Compiler ist. HI-TECH PICC (v9.65) Ich kann drei Verschiedene Optimierungsgrade einstellen: non, default, all. Doch egal welcher es funktioniert nicht. -.- zum Assemblercode - Wie kann ich den einsehen. Kannst du mir da helfen. Danke im Voraus
Die Variablen Sollten alle deklariert sein, Entweder Global oder in einer Funktion.
Tut mir Leid wegen dem Trari Trara. Und Danke für eure Hilfe. Es war ein Lehrlingsprojekt das ich von meinem Oberstift übernommen habe. Und ich habe gedacht er habe alle Configuration bits richtig gesetzt, doch nun habe ich heraus gefunden das alles am Watchdogtimer lag. Der wär nämlich an. Also lag das Problem in den Einstellungen wie im Code. HEHE ^^
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.