KEIL uVisio Debuggen: STM32 - wo bleibt mein Mikrocontroller stehen?

OP #4444297
Hallo,
ich nutze KEIL uVisio zum programmieren der STM32 Mikroprozessoren. 
Soweit alles ok.

Ab und zu stürzt mein Mikrocontroller irgendwo softwaremäßig ab, d.h. 
ich habe irgendwo ein Programm-/Programmierfehler, irgendwo bleibt das 
Programm stehen.

Nun möchte ich gern mit Keil Debuggen.  D.h. Keil soll mir zeigen bei 
welchem Schritt das Programm stehen geblieben ist.

Was muss ich machen damit mir Keil dies anzeigt?
OP #4444417
./. schrieb:
> TI Appnote: SPMA043.PDF

Hmmmm.....Ich verstehe dies nicht.
IcH finde keine Lösung zu meinem Problem.


- ich benutze KEIL
- STM32F103 von ST Micro
- ST-LINK/V2 Programmer
- Mikrocontroller hängt sich manchmal auf, bleibt
  stehen. Ich vermute der uC wartet auf irgend etwas,
  hängt in einer Schleife fest. Softwareproblem, aber
  ich weiss nicht wo.
==> Ich möchte mit KEIL sehen wo aktuell der uC im
        laufendem Betrieb sich befindet.
Gast #4444429
"Stop" drücken und schauen, wo das Programm sich gerade befindet.
Vielleicht in einer Endlos-Schleife? In einem Handler?
Oder startet der uC einfach neu?

Wird ein Betriebssystem benutzt?

Was heißt "ab und zu"? Gut reproduzierbar?
Oder nur alle paar Stunden/Tage/Wochen?
OP #4445128
Horst schrieb:
> "Stop" drücken und schauen, wo das Programm sich gerade befindet.

Ah, super. Funktioniert. Danke.

Ja, das Programm wartet in einer Schleife while(!neueDatenVorhanden);
Und die Variable wird immer aus einem anderen Programm/Funktion >1 
gesetzt. Da muss ich mir die andere Funktion anschauen warum da keine >1 
kommt.
Gast #4445232
Micro C. schrieb:

> Ja, das Programm wartet in einer Schleife while(!neueDatenVorhanden);
> Und die Variable wird immer aus einem anderen Programm/Funktion >1
> gesetzt.

Hört sich nach dem Fehlerteufel #1 an: ist 'neueDatenVorhanden' als 
volatile deklariert?
OP #4446495
Jojo S. schrieb:
> Micro C. schrieb:
>
>> Ja, das Programm wartet in einer Schleife while(!neueDatenVorhanden);
>> Und die Variable wird immer aus einem anderen Programm/Funktion >1
>> gesetzt.
>
> Hört sich nach dem Fehlerteufel #1 an: ist 'neueDatenVorhanden' als
> volatile deklariert?

ja, die Variable ist als __IO deklariert.
Bei STM:
#define  __IO  volatile    /*!< defines 'read / write' Permissions*/

Ich konnte mit Ozi auch soviel raus bekommen:
Es wird per I2C IRQ ein EEPROM ausgelsen. In einer Schleife warte ich 
dann auf die gelsenen Daten die die IRQ-Routine am Ende mit 
neueDatenVorhanden = 1; anzeigt. Danach werden die Daten ausgewertet und 
ein neuer Lesezyklus beginnt. Einmal funktioniert das Lesen. Aber beim 
nächsten Lesedurchgang nicht mehr. Das Oszi zeigt mir an dass ein I2C 
Start stattfindet und sofort danach ein I2C Stop. Naja.....und die 
While-Schleife die auf neueDatenVorhanden == 1; wartet .......wartet 
ewig.

Was mich beim debuggen mit KEIL noch interessiert:
Ich sehe immer erst wenn das Kind in den Brunnen gefallen ist (Programm 
hängt in obiger Schleife fest). Dann sehe ich auch mit Tip von Horst an 
welcher Stelle sich das Programm festgefahren hat. Was ich noch gern 
hätte:

==> Ist es möglich mit KEIL debugging die Abarbeitung "aufzuzeichnen". 
So dass ich im nachhinein "steps zurück" blicken kann was der µC gemacht 
hat?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.