IAR: MSP430 hängt im Startupcode fest.

Gast #3411070
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
Angehängte Dateien:
Gast #3413174
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".
Gast #3413520
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.
Persönliche Seite #3413998
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
Gast #3414872
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren