www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC/MPLAB Watch-Werte stimmen nicht


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Pascal L. (pascal_l)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Fasti (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

Hast du Compileroptimierungen aktiviert? Wenn ja kannst du die Angaben 
im Watch Window in den meisten Fällen vergessen.

Grüße

Fasti

Autor: Pascal L. (pascal_l)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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...

Autor: Fasti (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net