Forum: Mikrocontroller und Digitale Elektronik STM32 - HardFault beim Debugging mit IAR Embedded Workbench


von Dominik H. (d_hezel)


Lesenswert?

Hallo allerseits,

ich programmiere schon seit längerem mit Ride7 und dem RLink an einem 
STM32F103RBT herum. Das läuft auch ganz wunderbar. Aus der Software soll 
demnächst mal eine Lötstation werden aber bis jetzt enthält sie nur 
diverse Programmteile wie GPIO- und SysTick-Interrupt, 
T6963-Displayausgabe, PWM,...
Nachdem jetzt mein JLink EDU von SEGGER bei mir eingetroffen ist möchte 
nun unter IAR Embedded Workbench weitermachen (gut, auch nur 32k als 
Kickstart-Version aber stürzt wenigstens nicht regelmässig ab wie 
Ride7).

Zu meiner Überraschung stehe ich aber gerade etwas ratlos vor folgendem 
Phänomen:

Wenn ich die Software im IAR EW Debugger ausführe läuft sie beim ersten 
mal problemlos durch. Go, Break, Stepping... alles geht. Wenn ich dann 
aber das Debugging mit "Reset" zurücksetze und das Programm das zweite 
mal laufen lasse springt der Controller an der Stelle, an der ich im 
NVIC_ISERx-Register den EXTI2-Interrupt aktiviere immer in den 
HardFault. Im Register taucht die "1" an entsprechender Stelle auch noch 
auf, wird also wohl geschrieben, aber dann is' Schicht im Schacht. Lasse 
ich den Interrupt deaktiviert, läuft das Programm auch nach dem 20. 
Reset problemlos.
Unter Ride7 tritt dieses Problem mit genau dem gleichen Quellcode NICHT 
auf. Der EXTI2-Interrupt funktioniert auch, also bin mir relativ sicher, 
nicht an eine falsche (illegale) Adresse zu schreiben. Sonst ginge ja 
der Interrupt nicht. Tjaaaa....???

Hat irgendjemand diese Erfahrung auch schon gemacht? Habe ich eine der 
umfangreichen Einstellungen bei IAR und/oder JLink übersehen?

Danke für Eure Hilfe!
Dominik

von JLink-Nutzer (Gast)


Lesenswert?

Welche Einstellung hast du für den Reset gewählt (Project Options)?

Wenn es nur ein JLink-"Software"-Reset (einfach PC umsetzen) ist, kann 
das u.U Probleme machen

von Dominik H. (d_hezel)


Lesenswert?

Hallo JLink-Nutzer,

das klang sehr erfolgversprechend. Leider war es das auch nicht. Mit 
allen verfügbaren Einstellungen ("Normal", "Core", "Reset Pin", "Connect 
during Reset", "Halt after Bootloader" und "Halt before Bootloader") das 
gleiche. An den Flash-Breakpoints liegt's auch nicht. Weiß' auch nicht, 
ob das sein könnte, hatte ich aber auf Verdacht mal abgestellt.
Ich spiel' mal weiter dran rum. Vielleicht hat ja noch jemand eine Idee.

Trotzdem natürlich vielen Dank für Deine Hilfe!

Dominik

von thorstendb (Gast)


Lesenswert?

Hi,

hast du einen schwarzen (normale Version) oder weissen (Edu Version) 
JLink, kannste auch mal uVision (MDK-ARM) (www.keil.com) zu Rate ziehen, 
wenn du eh gerad am IDE ausprobieren bist.

VG,
/th.

von Dominik H. (d_hezel)


Lesenswert?

Ok. Hab' mal das Oszilloskop dran gehängt und nachgesehen. Bei keiner 
der Einstellungen sehe ich beim Reset via Debugger ein Low am Reset-Pin. 
Bei meiner Hardware-Reset-Taste schon. Und auch zu Beginn des 
Debuggings! Der JLink scheint also in Ordnung zu sein und einen Reset am 
Pin zu liefern. Jetzt frag' ich mich nur, warum er das nicht auf 
Anweisung der IDE auch tut. Es könnte also immer noch ein 
Einstellungsproblem sein.

Nun kann ich immerhin das Problem schon mal eingrenzen. Meine Software 
scheint's nicht zu sein, denn wenn ich zusätzlich zum Debugger-Reset 
auch noch die Reset-Taste auf meinem Board drücke, dann läuft's ohne 
Probleme.

Auf jeden Fall war der Hinweis auf den Reset von "JLink-Nutzer" schon 
mal sehr hilfreich!

Dominik

von Dominik H. (d_hezel)


Lesenswert?

Ah. War zu schnell...

Hallo "thorstendb"!

Ja, mit diesem Gedanken hatte ich auch schon gespielt. Gibt's ja wohl 
auch als Eval-Version. Werde ich mir mal runterladen und testen. Ja, ich 
hab' die weiße EDU-Version.
Danke Dir!

Dominik

von thorstendb (Gast)


Lesenswert?

> Gibt's ja wohl auch als Eval-Version.
jep, 32k.
Wenn du Probleme mit dem Treiber hast, hier posten oder PM :-)


VG,
/th.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

> Ja, ich hab' die weiße EDU-Version.

Damit hat Segger nen coolen Schachzug gemacht, meiner Meinung nach. 
Somit lohnt es nicht mehr, als Hobbybastler nen China Nachbau zu kaufen, 
weil er billiger ist (war). **grins**

Schon echt krass, was so an kopierten JLinks und ULINKs rumschwirrt (s. 
ebay).


VG,
/th.

von Dominik H. (d_hezel)


Lesenswert?

Hmm, das Problem beschränkt sich offenbar tatsächlich darauf, dass der 
JLink während des Debuggings, egal bei welcher Reset-Einstellung, keinen 
"Low"-Pegel auf den RST-Pin des Controllers legt. Beim Flashen tut er 
das. Und wenn ich im JLink-Commander "r" eingebe tut er es auch. Keil 
hab' ich runter geladen aber noch nicht installiert. Ich denke immer 
noch, dass es ja eigentlich nicht so schwer sein kann und IAR gefällt 
mir schon sehr gut. Fehlt in irgendeinem Script das "r"? Wenn ja, in 
welchem? Ich würd's ja auch selbst reinschreiben.

Ich hab' mal an IAR geschrieben, aber da ich die kostenlose 
Kickstart-Version verwende, werde ich wohl auf die Antwort etwas warten 
müssen... falls ich eine bekomme.

Irgendwo hab' ich einen Hinweis darauf gefunden, dass bei Olimex-Boards 
evtl. der RST und der TRST verbunden sind was Probleme machen könnte. 
Hatte mich schon gefreut. Aber als ich auf die Unterseite meines Boards 
(STM32-H103) geschaut hab' war der Jumper natürlich schon offen :-(.

Naja, vielleicht schaut ja auch jemand von SEGGER hier vorbei dem was 
dazu einfällt. Hab' zwar schon dort in's Forum gepostet. Aber die 
Reaktionen sind (noch) mangelhaft...

Ich geh' mal weiterspielen... :-/

Dominik

von JLink-Nutzer (Gast)


Lesenswert?

Dominik Hezel schrieb:
> Fehlt in irgendeinem Script das "r"? Wenn ja, in
> welchem? Ich würd's ja auch selbst reinschreiben.

Schau mal in die IAR Hilfe bzgl. C-Spy Macros. Es gibt ein paar 
definierte Macros die automatisch aufgerufen werden bei bestimmten 
Situation (Start Debugging, Reset-Taste, End Debugging). Wenn du so ein 
Macro definierst und einbindest (Project Options -> Debugger), kannst du 
ja mal probieren darin einen Reset-Befehl nochmal auszuführen (irgendwo 
gibts ne Makro-Kommandoreferenz).

Aber ne endgültige Lösung ist das natürlich nicht. Würde aber helfen ein 
anderes Problem auszuschließen

von SEGGER - Til Stork (Gast)


Lesenswert?

> Naja, vielleicht schaut ja auch jemand von SEGGER hier vorbei dem was
> dazu einfällt. Hab' zwar schon dort in's Forum gepostet. Aber die
> Reaktionen sind (noch) mangelhaft...

Unsere J-Link Entwickler schauen da natürlich auch immer wieder rein, 
aber in erster Linie ist das ein Forum, indem sich Kunden gegenseitig 
helfen, wir möchten nicht den kompletten Support darüber machen. Hast du 
schon mal eine Email an unserern Support geschrieben? Falls dir 
irgendetwas auffällt, wo du sagst, da könnte es ein Problem geben oder 
das könnte man besser machen, dann bitte nicht zögern, sich direkt bei 
uns zu melden!

Ich werde aber natürlich mal einen Kollegen auf diesen Thread aufmerksam 
machen.

von Dominik H. (d_hezel)


Lesenswert?

So. Hat etwas länger gedauert, sorry...

@JLink-Nutzer:
Das wäre evtl eine Lösung. Hab's in der Hilfe gefunden. Ich werd's mir 
mal durchlesen. Und wenn das problemlos läuft dann könnte das schon die 
endgültige Lösung sein.

@SEGGER - Til Stork:
Ich dachte, für den JLink-EDU gäbe es den Support nur über's Forum. 
Deshalb war ich da etwas zurückhaltend. :) Vielleicht schreib' ich 
einfach doch mal eine Email.
Es sieht aber ohnehin so aus, als wäre das ganze ein IAR-Problem. Hab' 
jetzt mal Keil installiert und da kommt ein ganz normales "Low" als 
Reset. Funktioniert also.

Crossworks gäbe es ja auch noch. Gefällt mir auch ganz gut. Und wenn ein 
Projekt mal kommerziell werden sollte, dann käme man mit Crossworks 
commercial license plus JLink commercial immerhin zu ca. einem Drittel 
des IAR-Preises weg... Das ist heute ja fast schon geschenkt. :)

Auf jeden Fall schon mal danke für Eure Tipps! Wenn ich den Fehler finde 
werde ich natürlich berichten.

Grüße
Dominik

von Arne (Gast)


Lesenswert?

Dominik Hezel schrieb:
> Es sieht aber ohnehin so aus, als wäre das ganze ein IAR-Problem.

Dann schildere Dein Problem doch einfach dem IAR-Support in München.
Wir haben in der Firma auch ein Jahr lang die 32kB Version genutzt und 
es gab Support bevor wir die Vollversion gekauft haben. Denn so ein 
Fehler wäre dann sicher auch in der Vollversion drin.

von Dominik H. (d_hezel)


Lesenswert?

Also,...
laut dem IAR-Support ist ein solcher Reset in der Embedded Workbench gar 
nicht vorgesehen (!?) da es einen Abbruch des Debuggers verursachen 
könnte...
Da damit mein Problem nicht gelöst und das ganze eine eher 
unbefriedigende Antwort ist hab' ich noch mal nachgefragt. Hab' 
allerdings darauf noch keine Antwort.

Nachdem dieser "PC-Reset" ja allerdings normalerweise zu funktionieren 
scheint, frage ich mich, ob ich doch beim Programmieren was übersehen 
habe (siehe ganz oben). Gibt es dazu irgendwelche Ideen?

Grüße
Dominik

von Falko J. (spacefrog)


Lesenswert?

Hattest Du ein Lösung gefunden? Möglicherweise hab ich ein ähnliches 
Problem mit einem Stm32f7

von Dennis (Gast)


Lesenswert?

Falko J. schrieb:
> Hattest Du ein Lösung gefunden?

Typischerweise hat man bei diesem Fehler einfach den IRQ-Handler 
vergessen :-)

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.