Forum: Compiler & IDEs CrossStudio ARM Programm flashen


von Oluh (Gast)


Lesenswert?

Hallo!

Ich versuch mich seit einigen Tagen mit CrossStudio anzufreunden und 
stoße auf einige Probleme.

Wenn ich ein Programm kompiliere und dann debugge oder über Build and 
Run ausführe, läuft es. Nach dem Aus- und Einschalten des Controllers, 
läuft nix. Ich habe den Debugger nach dem Einschalten attached und auf 
den Speicherbereich 0x00100000 (da wo Flash anfangen soll) geschaut, da 
steht nur "ldreqd r0, [r0], -r0" auf jeder Adresse und sonstiger Müll.

Ich habe einfach das Standardprojekt für den AT91SAM7S256 erstellt und 
habe ein kleines Programm, was ledeglich eine LED anmacht.

Was bedeutet das? Wir beim Build and Run das Programm in dem RAM 
ausgeführt und gar nicht geflashed?

von (prx) A. K. (prx)


Lesenswert?

FAQ. Stolpert jeder drüber. Siehe Text im Startup-File,
STARTUP_FROM_RESET oder so.

von Oluh (Gast)


Lesenswert?

Danke für den Tipp!

Nun habe ich ein anderes Problem: Der Controller ließ sich programmieren 
und alles lief gut. Aber schon zum zweiten Mal heute ist der totale GAU: 
Der Flashspeicher bleibt nach dem Programmieren leer. Ich habe voller 
Verzeweiflung das Board mehrere Stunden in Ruhe gelassen und es ging 
plötzlich wieder... Ich konnte flashen und debuggen.

Kann sowas an dem Proramm liegen? Ist es möglich, mit einem 
ungeschickten Code den Debugger auszusperren?

von (prx) A. K. (prx)


Lesenswert?

Oluh schrieb:

> Ist es möglich, mit einem
> ungeschickten Code den Debugger auszusperren?

Ja. Der Debugger fliegt bei Reset aus dem JTAG raus und muss sich erst 
einmal wieder einklinken. Wenn das Programm durch irgendwelche Fehler 
rechtzeitig dafür sorgt, dass er das nicht mehr kann, dann ist Sense. 
Zumindest für JTAG - nur ein Bootloader hilft dann noch.

Eben deshalb hat Rowley diese Totschleife eingebaut (vor allem aber auch 
um den Startup debuggen zu können). Gibt dem Debugger Gelegenheit, den 
Core einzufangen bevor er Unfug stiften kann. Pfiffigere Zeitgenossen 
verwenden eine Zeitschleife über einige hundert Millisekunden, dann 
funktioniert das sowohl mit Debugger als auch ohne.

Apropos: Was für ein JTAG-Interface?

von Oluh (Gast)


Lesenswert?

Es ist ein Olimex USB Tiny.

Meine zweite Vermutung ist die Clock Source. Ich muss für meine 
Anwendung den Takt von Außen vorgeben. Als ich mit den Registern 
gespielt habe, habe ich eingestellt, dass die CS extern ist. Wäre es 
möglich, dass deswegen nix läuft? Denn mit der aktuellen Hardware kommt 
die Clock aus dem internen Oszillator.

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.