Datum:
Hallo zusammen. Ich habe das Problem, dass bei mir im Watch-Window werte von Variablen > 8bit oft nicht stimmen. Beispiel:
calcDiff(0,0); s16 calcDiff(s16 sPos, s16 sNeg) { // Local helpers s16 sSDiff = 0; // Calculate differece sDiff = sNeg - sPos; // ... // Return return sDiff; } |
Hier werden die variablen wie folgt im Watch angezeigt sDiff 0xA700 sNeg 0x0000 sPos 0x0000 Es scheint, als würde der Bereich auf den die Watchvariable zeigt nicht stimmen... sobald ich eine dummy variable vorher einfüge stimmt die Watch anzeige...
s16 calcDiff(s16 sPos, s16 sNeg)
{
// Local helpers
s8 byDummy = 0;
s16 sSDiff = 0;
// Calculate differece
sDiff = sNeg - sPos;
// ...
// Return
return sDiff;
}
|
Hat jemand eine Idee, was genau das Problem ist und wie dieses nachhaltig und sauber gelöst werden kann? Vielen Dank
Datum:
Hallo, Hast du Compileroptimierungen aktiviert? Wenn ja kannst du die Angaben im Watch Window in den meisten Fällen vergessen. Grüße Fasti
Datum:
Hallo Fasti Die Optimierungen hatte ich schon auf "Disable". Bei einigen Versuchen mit den Optimierungen und der erwähnten Dummy-Variable habe ich aber festgestellt, dass das Problem bei der MPLAB IDE liegt. Diese schafft es nicht, die Adressen der Variablen für das Watch-Window zu berechnen... Das Watch-Window hatte folgenden Wert: Adress Symbol Dec 306 sDiff 14592 301 sSeg 11802 303 sPos 26 (Der Aufruf der Funktion erfolgte mit entsprechenden Werten aud dem Programm-Ablauf und nicht wie im Beispiel mit (0,0)) Da ich vermutete , dass die Adressen nicht stimmen, habe ich diese manuell gesetzt: Adress Symbol Dec 306 sDiff 14592 301 sSeg 11802 303 sPos 26 305 305 123 300 300 6825 302 302 6702 6825 - 6702 = 123!!!!! Dank der Dummyvariable konnte MPLAB die Adressen richtig berechnen... Ohne kann er es nicht richtig... (Sieht nach einem alignement problem aus...) Weis jemand, wie dies umgangen werden kann? Das wäre ja so nicht wirklich brauchbar...
Datum:
Abgesehn davon, dass bei MPLAB generell Bugpflege betrieben wird, meine ich mich zu erinnern, dass es im Watch window auch Probleme gibt, wenn der Compiler Variablen in ein Register und nicht ins RAM legt. Nachdem die Register schnell wieder überschrieben werden, da sie ja mehrfach genutzt werden stimmt natürlich der angezeigte Wert dann nicht. Check das mal. Grüße Fasti