Forum: Compiler & IDEs KEIL uVisio Debuggen: STM32 - wo bleibt mein Mikrocontroller stehen?


von Micro C. (fischgebruell)


Lesenswert?

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?

von ./. (Gast)


Lesenswert?

TI Appnote: SPMA043.PDF

von Micro C. (fischgebruell)


Lesenswert?

./. 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.

: Bearbeitet durch User
von Horst (Gast)


Lesenswert?

"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?

von Micro C. (fischgebruell)


Lesenswert?

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.

von Jojo S. (Gast)


Lesenswert?

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?

von Micro C. (fischgebruell)


Lesenswert?

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?

von Peter P. (Gast)


Lesenswert?

Suche mal nach "ETM", vielleicht als "ETM KEIL".
Ich bin mir aber nicht sicher, ob der ST-LINK/V2 dies kann...

von Cortex 2 go (Gast)


Lesenswert?

Micro C. schrieb:
> Ist es möglich mit KEIL debugging die Abarbeitung "aufzuzeichnen"

http://www.keil.com/support/man/docs/jlink/jLink_tracing.htm

von Micro C. (fischgebruell)


Lesenswert?

Peter P. schrieb:
> Suche mal nach "ETM", vielleicht als "ETM KEIL".
> Ich bin mir aber nicht sicher, ob der ST-LINK/V2 dies kann...

Cortex 2 go schrieb:
> http://www.keil.com/support/man/docs/jlink/jLink_tracing.htm

OK, Danke.
Mist, leider nur mit jLink funktionabel. Da komme ich mit meinem 
ST-LINK/V2 nicht weiter  :-(

von Cortex 2 go (Gast)


Lesenswert?

Musst du bei Keil nur kurz suchen:
http://www.keil.com/appnotes/docs/apnt_245.asp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.