Datum: 23.04.2008 12:53
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
Datum: 23.04.2008 13:03
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.
Datum: 23.04.2008 13:10
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")?
Datum: 23.04.2008 13:58
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...
Datum: 23.04.2008 14:53
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)
Datum: 23.04.2008 15:05
Füg mal ne Verzögerung ein. Wenn der dann mehr schafft, liegt's wahrscheinlich am Puffer, wenn der weniger schafft am Watchdog oder an 'nem anderen Timeout.
Datum: 23.04.2008 15:23
Benutzt du die Example-Header-Files von TI? Falls nein: die erleichtern dir so einiges...
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel