Forum: Mikrocontroller und Digitale Elektronik IAR: MSP430 hängt im Startupcode fest.


von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,


Ich arbeite mit
IAR Vollversion 4.3
MSP430F5438
Programmer von Olimex MSP430-JTAGTiny-V2

Folgendes Problem:
Ich führe Download&Debug aus, dann steht der Debugger wie im oberen Teil 
des Bildes bei main(). Bei "Go" läuft er normal los.

Den Programmlauf kann ich mit "break" stoppen.
Wenn ich dann die Taste "Reset" betätige, sollte der Debugger doch 
wieder bei main() stehen, macht er aber nicht. Siehe unteren Teil des 
Bildes.

Ich habe schon ein bisschen gesucht und vermute, dass es an dem doch 
größeren Umfang meiner verwendeten Variablen liegt, die alle 
initialisiert werden müssen, bis der Debugger bei der Deaktivierung des 
WDT ankommt.
Zwischenzeitlich spricht der WDT an.
 WDTCTL = WDTPW + WDTHOLD;  steht aber als erster Befehl hinter main()


Es soll einen Startup-Code geben, in dem man schon vor der 
Initialisierung der Variablen den WDT deaktivieren kann.
Wo ist dieser Code? Wo muss ich welche Projekteinstellungen verändern?

Danke schonmal im Voraus...
Martin

von Go MSP (Gast)


Lesenswert?

Der Speicher ist nicht so unendlich groß, dass der Watchdog zuschlägt.

Das beschriebene Verhalten kannst du unter den 
"Projektoptionen/Debugger" einstellen. In dem Dialog gibt es die Option 
"Run to main".

von Martin (Gast)


Lesenswert?

Hallo,

Die Option "Run to" war bereits aktiviert. In dem darunterliegenden Feld 
ist "main" eingetragen.


Ich habe aber soeben die Lösung gefunden:
Es lag tatsächlich an der Initialisierungszeit. Deshalb ist er nicht 
nach main sondern immer zu ?cstart_begin gesprungen und hat dabei im 
Debug-log Fenster target reset angezeigt.

Hier der Hinweis von IAR:

http://supp.iar.com/Support/?note=37778

Nach einfügen der Datei in mein Projekt funktioniert wieder alles wie 
gewohnt.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Martin schrieb:

> Ich habe aber soeben die Lösung gefunden:
> Es lag tatsächlich an der Initialisierungszeit. Deshalb ist er nicht
> nach main sondern immer zu ?cstart_begin gesprungen und hat dabei im
> Debug-log Fenster target reset angezeigt.

Für die CCS-Nutzer:
1
int _system_pre_init(void) {
2
  WDTCTL = WDTPW + WDTHOLD;
3
  return 1;
4
}

irgendwo im Projekt eingefügt löst das Problem dort.

Max

von Go MSP (Gast)


Lesenswert?

Martin schrieb:
> habe aber soeben die Lösung gefunden

Danke für deine Rückmeldung!

Die Note kannte ich nicht. Du hast ja auch einen MSP mit 16kB RAM 
verwendet. Das habe ich nicht beachtet.

Ich finde die Lösung aber nicht sehr glücklich. Wenn man den Watchdog 
braucht, sollte er laufen. Besser wäre zu prüfen, ob man wirklich mehr 
als 4kB initialisierte Variablen braucht. Oder man initialisiert die 
Variablen in mehren Blöcken und bedient dazwischen den Watchdog.

von Roland E. (roland0815)


Lesenswert?

Danke für die Lösung. Gleich mal notiert...

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.