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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.