Forum: Mikrocontroller und Digitale Elektronik MSp430 TAR springt


von Codebär (Gast)


Lesenswert?

Hi,
habe folgendes Problem:
Wenn ich mit CodeComposerStudio durch mein Programm steppe, dann gibt es 
da mehrere Stellen an denen der Inhalt von TAR "springt".
zb von 0x8F41 auf 0x272D ...
Eine der Zeilen an denen das passiert ist zB diese:
1
MS_BitMask = (1 << (Size - 1));
Woran kann das liegen?

Wenn ich das Step-Over verwende, dann bleiben die Werte stimmig ...
Ist das ein Fehler von CCS oder hab ich Mist gebaut?


Gruß
Codebär

von Stefan (Gast)


Lesenswert?

Debuggen mit Hilfe des EEM bedeutet nicht zwangsläufig, dass beim 
Single-Stepping z.B. auch der Timer-Clock angehalten wird:
http://focus.ti.com/lit/an/slaa393a/slaa393a.pdf

von Codebär (Gast)


Lesenswert?

Hallo,

vielen Dank für den Hinweis auf das Pdf ... ich hab (wie im Dokument 
beschrieben) die Einstellungen kontrolliert. Laut den checkboxen die 
gesetzt sind, werden alle Clocks angehalten.

Was mich auch ein wenig wundert, ist dass mein Programm beim 
Singlestepping, oder wenn ich von Breakpoint zu Breakpoint springen 
will, abstürzt. Wenn ich den Play Button verwende und alle Breakpoints 
weg sind, dann läuft es durch ohne abzustürzen. (ich lasse UART-Zeichen 
ausgeben um zu erkennen wo ich mich im Programm befinde, wenn ich keine 
Breakpoints verwende)

Ich verwende übrigens das MSP430FET-USB, CodeComposerStudio(die 
MSP430-Core Version mit Codebeschränkung) und einen MSP430F23xx.


Hat jemand schon ähnliche Probleme gehabt?

Gruß
Codebär

von Stefan (Gast)


Lesenswert?

Was genau bedeutet, Dein Programm stürzt ab... was passiert?
Stürzt CCS oder das MSP430-Programm ab?
Wieviele Breakpoints hast Du gesetzt?
Die F23xx haben 2 HW-Breakpoints, hast Du mehr gesetzt, werden die in SW 
emuliert. Dann läuft Dein gesamter Code aber im Single Stepping mode 
(zumindest bei IAR)... das kann dann von BP zu BP ewig dauern!

von Codebär (Gast)


Lesenswert?

Hallo Stefan,

ich habe nur die SW-BP verwendet.
Mit Absturz meine ich: das Programm macht nicht an der erwarteten Stelle 
weiter(innerhalb einer while(1)-Schleife), sondern startet neu.
Ich habe bei der Initialisierung der Variablen am Anfang der main() 
ebenfalls ein BP gesetzt um sicher zu sein, dass das Programm neu 
gestartet wird ... für die while(1) gibt es keine Abbruchbedingung, also 
muss irgend eine Art von Reset ausgelösst werden um beim Anfang der 
main() zu landen?
Hardwaredefekt und Watchdog könnens nicht sein, da ohne die BP (oder 
Singlestepping) das Programm ja durchläuft.

I'm at the end with my latin ;)

Gruß
Codebär

von Stefan (Gast)


Lesenswert?

Codebär schrieb:
> Hardwaredefekt und Watchdog könnens nicht sein
Wie und wo deaktivierst Du den WDT?

Ohne kompletten Code wird das hier allerdings zum Ratespiel!

von Codebär (Gast)


Lesenswert?

Hallo Stefan,

den Code kann(darf) ich leider nicht hier reinstellen :(
WDT wird wie in den TI Beispielen direkt nach der Initialisierung der 
Variablen mittels:
1
WDTCTL = WDTPW + WDTHOLD;
deaktviert.

Nun ja, ich werd wohl allein klarkommen müssen, ein Ratespiel will ich 
Dir nicht zumuten ... Zeitverschwendung und so ;)

Ich bedanke mich trozdem für deine Hilfe und das Interresse an meinem 
Problem.


Liebe Grüße
Codebär

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.