schleife wird ungewollt verlassen

Gast #850308
Hallo zusammen!

Habe folgendes Problem bei meinem TI F2812 DSP
mein Programm sieht grob gesagt folgendermaßen aus:

void main()
{
puts("start")
while(TRUE)
{
 puts("prozess")
}
}

Eigentlich sollte einmal 'start' ausgegeben werden, endlos gefolgt von 
'prozess'.
Bei mir schaut die Ausgabe allerdings so aus, dass einmal 'start' 
ausgegeben wird und dann nach 13 mal prozess, woraufhin das programm 
wieder bei der main funktion beginnt, start ausgiebt, anschließend 13 
mal prozess usw.
Woran liegt das? Konnte in anderen Beiträgen nichts finden, außer dass 
ich die Vermutung habe, dass es etwas mit Interrupts zu tun hat. Aber 
wie steuer ich diese auf einem DSP?

Über Antworten würde ich mich riesig freuen!
Viele Grüße
Andi
#850319
Ich kenne deine Architektur nicht, aber wenn puts() Daten in einen 
Buffer ablegt und dann sofort zurückkehrt, kann es sein, dass der Buffer 
überläuft -> Stack kaputt -> Reset

Vielleicht musst du ihm zum Senden einfach etwas mehr Zeit geben.

Nur so eine Idee.
#850331
Ich kenne mich mit DSPs nicht im Speziellen aus.

Aber mir fällt noch ein:

-Evtl. ist ein Watchdog aktiviert, der nicht bedient wird?
-Interrupts "enabled", die zuschlagen und für die keine ISR angelegt ist 
(somit Sprung ins Nirvana oder "unimplemented Opcade Trap")?
Gast #850397
Ich tippe auch auf den Watchdog.

Benutzt du die Example-Header-Files von TI?
Falls ja: rufst du die InitSysCtrl auf? Dort wird nämlich der Watchdog 
deaktiviert.

Ich schätze dein Programm schafft es 13mal prozess auszugeben bevor der 
WD auslöst...
Gast #850471
wow, danke für die zahlreichen und schnellen antworten!!

wenn ich die ausgabe verkürze(z.B. 'sta' und 'pro'), schafft er mehr 
ausgaben, bevor der reset stattfindet -> könnte am watchdog liegen.
wollte versuchen den Watchdog zu reseten mit WDKEY = 0x55 und 
anschließend WDKEY = 0xAA.
Welche Datei muss ich einbinden, damit der Compiler nicht meckert bei 
WDKEY?
Mein Target ist ein TMS320F2812.

Bis jetzt hab ich folgende Dateien eingebunden: stdio.h, volume.h (aus 
dem Code Composer Tutorial; definiert einige wenige variablen aber keine 
Register oder so)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.