MPLAB "debug" funktioniert, aber "run" nicht

Gast #3744258
Lesenswert?

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
Gast #3746743
Lesenswert?

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");
             }
#3746753
Lesenswert?

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
Gast #3747139
Lesenswert?

@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
Gast #3754018
Lesenswert?

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 ^^

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren