- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: Vergleich zweier Werte führt zu merkwürdigem Verhalten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.01.2010
    Ort
    Franken
    Alter
    38
    Beiträge
    27

    Vergleich zweier Werte führt zu merkwürdigem Verhalten

    Anzeige

    Powerstation Test
    Hallo,
    ich habe ein sehr merkwürdiges Problem. Es geht einfach darum, dass ich zu Debugzwecken einen Wert an den PC schicken möchte sobald sich dieser ändert. Eigentlich keine große Sache, wie man auch am Code sieht. Dummerweise ändert sich der ausgegebene Wert (input_diff) ohne mir ersichtlichen Grund auf absolut unrelaistische Werte, sobald ich den Vegleich auf Änderung mache. Kommentiere ich die IF-Zeile und die Klammern aus, bekomme ich zwar eine endlose Flut an Werten geschickt, es ist aber kein einziger dabei, der unplausibel ist.

    Code:
    volatile int input_diff;
    volatile unsigned char tempstring[10]; 
    volatile int last = 0;
    
    // Irgendwo in der Hauptschleife:
    
    if (last != input_diff)
    {		
        last = input_diff;
        itoa( input_diff,tempstring,10);
        USARTSendLine(tempstring);
    }
    Ich kann mir das absolut nicht erklären, woher dieser Nebeneffekt kommt. Die Variable input_diff wird nur in der Hauptschleife, also vor der Abfrage auf Änderung, gesetzt. Kann ein Interrupt während des Vergleichs soviel Choas anrichten, dass der Inhalt einer Variablen, die im Interrupt überhaupt nicht genutzt wird, geändert wird?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    Kannst du unrealistische Werte und plausible Werte mal etwas genauer spezifizieren.
    Leider hast du ja nur ein Stück Code mitgeschickt, was allerdings für sich gesehen okay aussieht. Jedenfalls ist mir auch nach zehnmaligem Draufsehen nichts aufgefallen.

    Manchmal hilft es, etwas mehr vom Code preiszugeben. Vorallem wenn man sich selbst sicher ist, dass der Codeschnipsel den man postet okay ist.

    Hast du den Code hier rein kopiert, oder noch mal neu geschrieben?

    Wie kommst du darauf, dass ein Interupt für die falschen Werte verantwortlich ist, wenn du mit der if-Abfrage arbeitest, aber sonst deine Variable in Ruhe läßt? Da müssten dann ja ebenfall Fehler auftreten, wenn du direkt alle Werte ausgeben läßt.

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Klingt nach Timing-Problemen - ich sehe auch nicht, wo du Interrupts vor dem Betreten des kritischen Abschnittes deaktivierst bzw. danach wiederherstellst.

    mfG
    Markus

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.07.2009
    Beiträge
    40
    habe leider keine Zeit mich tiefer damit zu befassen:
    1. warum nimmst Du nicht sprintf?
    2. funzt die Routine in einem kleinen Testprogramm um die
    "komplexe" Umgebung auszuschliessen?
    3. ich bin nicht sicher, ob itoa damit happy ist, dass Du
    unsigned char verwendest

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests