-> Hier kostenlos registrieren
Hallo.
Ich habe da ein sehr sehr komisches Problem.
Paar Daten:
Programmiersprache: ANSI C (NC308 (Mitsubishi)
Prozessor: M32C/83 M30833FJFP
Problem:
Eine Variable ändert ihren Wert ohne das dazu irgendwo
eine Freigabe dazu herrscht, oder das sie sonstwo zugewiesen wird!
Hier mal die Bereiche, wo die Variable bearbeitet wird (def. nirgends wo
anders)
Die Variable nennt sich PRUEFSUMME_BPG_AKTUELL
Da ich in der 1. Funktion sie mittlerweilen feste auf 918 gesetzt habe,
dachte ich, sei ich das Problem los.
Aber das paradoxe daran ist, das trotz der festen Zuweisung mit der
Zahl 918, trotzdem irgendwann eine 768 darin steht.
Und zwar immer dann, wenn SUMME_VERSION_EMPFANGEN (Ein sogenannter Schrittmerker, also der die Nummer des Aktuellen Schrittes
gespeichert hat)
den Wert 4 erreicht hat.
Warum???? Ich verstehs einfach nicht. Absolut keinen Plan, warum die
Variable plötzlich 768 hat.
Hat jemand irgendeine Idee????? Danke
Ich habe da ein sehr sehr komisches Problem.
Paar Daten:
Programmiersprache: ANSI C (NC308 (Mitsubishi)
Prozessor: M32C/83 M30833FJFP
Problem:
Eine Variable ändert ihren Wert ohne das dazu irgendwo
eine Freigabe dazu herrscht, oder das sie sonstwo zugewiesen wird!
Hier mal die Bereiche, wo die Variable bearbeitet wird (def. nirgends wo
anders)
Code:
if((Funk_Buffer[7]==32)&&(DATEN_LAENGE>18)&&(SUMME_VERSION_EMPFANGEN<2))
{
Befehlsname[0] = Funk_Buffer[8];
Befehlsname[1] = Funk_Buffer[9];
Befehlsname[2] = Funk_Buffer[10];
Befehlsname[3] = Funk_Buffer[11];
Befehlsname[4] = '\0';
PROGRAMM_VERSION_BPG = atoi(Befehlsname);
Befehlsname[0] = Funk_Buffer[13];
Befehlsname[1] = Funk_Buffer[14];
Befehlsname[2] = Funk_Buffer[15];
Befehlsname[3] = Funk_Buffer[16];
Befehlsname[4] = Funk_Buffer[17];
Befehlsname[5] = '\0';
//PRUEFSUMME_BPG_AKTUELL = atoi(Befehlsname);
PRUEFSUMME_BPG_AKTUELL = 918;
SUMME_VERSION_EMPFANGEN = 2;
}
Code:
void Funk_Managment(void)
{
unsigned char ausgabe[8];
if(NEUES_FUNK_BPG == 1)
{
Funk_Daten_Senden(2);
}
if((NEUE_SCANNUNG_1_TYP==1)&&(NEUE_SCANNUNG_1_BPG==1))
{
TIMER_START[0] = 0; // Timer zurücksetzen
if(SUMME_VERSION_EMPFANGEN==0)
{
Funk_Daten_Senden(3);
SUMME_VERSION_EMPFANGEN=1;
}
if(SUMME_VERSION_EMPFANGEN>=2)
{
if((PRUEFSUMME_BPG_AKTUELL!=Pruefnummer_Programm[Programm_Nr_Pruefung-1])||(PROGRAMM_VERSION_BPG!=Pruefversion_Programm[Programm_Nr_Pruefung-1]))
{
FUNKAUFTRAG_STEH_AN = 1;
SUMME_VERSION_EMPFANGEN = 0;
}
if((PRUEFSUMME_BPG_AKTUELL==Pruefnummer_Programm[Programm_Nr_Pruefung-1])&&(PROGRAMM_VERSION_BPG==Pruefversion_Programm[Programm_Nr_Pruefung-1]))
{
if(SUMME_VERSION_EMPFANGEN<4)
Funk_Daten_Senden(4);
SUMME_VERSION_EMPFANGEN = 4;
}
if(SUMME_VERSION_EMPFANGEN>=5)
{
Funk_Daten_Senden(5);
SUMME_VERSION_EMPFANGEN = 6;
}
if(SUMME_VERSION_EMPFANGEN==7)
{
SUMME_VERSION_EMPFANGEN=0;
PROGRAMM_VERSION_BPG = 0;
PRUEFSUMME_BPG_AKTUELL = 0;
}
if((DRUCK_STEH_AN==0)&&(FUNKAUFTRAG_STEH_AN==0))
{
NEUE_SCANNUNG_1_TYP=0;
NEUE_SCANNUNG_1_BPG=0;
}
}
}
inttostr(AUSGABE_TEXT_1,Pruefversion_Programm[Programm_Nr_Pruefung-1]);
inttostr(AUSGABE_TEXT_2,PROGRAMM_VERSION_BPG);
inttostr(AUSGABE_TEXT_3,PRUEFSUMME_BPG_AKTUELL);
inttostr(ausgabe,Pruefnummer_Programm[Programm_Nr_Pruefung-1]);
strcat(AUSGABE_TEXT_3," - ");
strcat(AUSGABE_TEXT_3,ausgabe);
// Scannungen löschen, wenn nicht weiter gescannt wurde
if(((NEUE_SCANNUNG_1_TYP==1)&&(NEUE_SCANNUNG_1_BPG==0))||((NEUE_SCANNUNG_1_TYP==1)&&(NEUE_SCANNUNG_1_BPG==0)))
{
TIMER_START[0] = 1;
}
if(TIMER_ENDE[0]==1)
{
NEUE_SCANNUNG_1_TYP=0;
NEUE_SCANNUNG_1_BPG=0;
TIMER_ENDE[0]=0;
SUMME_VERSION_EMPFANGEN=0;
PROGRAMM_VERSION_BPG = 0;
PRUEFSUMME_BPG_AKTUELL = 0;
}
}
Die Variable nennt sich PRUEFSUMME_BPG_AKTUELL
Da ich in der 1. Funktion sie mittlerweilen feste auf 918 gesetzt habe,
dachte ich, sei ich das Problem los.
Aber das paradoxe daran ist, das trotz der festen Zuweisung mit der
Zahl 918, trotzdem irgendwann eine 768 darin steht.
Und zwar immer dann, wenn SUMME_VERSION_EMPFANGEN (Ein sogenannter Schrittmerker, also der die Nummer des Aktuellen Schrittes
gespeichert hat)
den Wert 4 erreicht hat.
Warum???? Ich verstehs einfach nicht. Absolut keinen Plan, warum die
Variable plötzlich 768 hat.
Hat jemand irgendeine Idee????? Danke