HalliHallo,
ich habe folgendes Problem und bräuchte daher mal einen Rat:
(schon einmal vorweg-->Ich habe noch nicht sooo super sonderlich viel
praktische Erfahrung mit µC)
Ich habe ein Evaluierungsboard mit einem LPC1769(Cortex M3) von NXP und
will diesen mit Hilfe eines ULINK2 über Keil programmieren.
Dafür habe ich mir ein Beispiel-Programm "EasyWeb" geladen und
entsprechend angepasst. Funktioniert auch soweit--> Jedoch nur im
Debug-Modus und nur wenn ich nicht resete.
Sobald ich Resete wird ein Speicherbereich weit außerhalb des
Flash-Speicherbereichs, in der das Programm liegt, angesprochen und er
läuft somit ins Nirvana (Anfangsadresse beim Reset 0x1FFF 0080).
Wenn ich das Programm simuliere und dann resete, wird der Reset_Handler
aufgerufen und der richtige Adressbereich angesprochen (irgendwas bei
0x00000 0040).
Daher muss ja irgendwie an der Hardware/Konfiguration des ULINK liegen
oder?! Ich habe Screenshots der Keil-Target/Debug-Konfiguartion
angehängt.
Würde sehr über hilfreiche Kommentare freuen :)
StudentinHH schrieb:> Sobald ich Resete wird ein Speicherbereich weit außerhalb des> Flash-Speicherbereichs, in der das Programm liegt, angesprochen und er> läuft somit ins Nirvana (Anfangsadresse beim Reset 0x1FFF 0080).
UM10360.pdf lesen. Das ist der ROM Bereich (MaskenROM, nicht Flash)!
Dort springt er immer beim Start (Power-on Reset) rein, und aktiviert
dann abhängig von CRP JTAG oder den Bootloader.
Wenn Dein Programm nicht vom ROM Loader aus läuft, stimmt u.U. einfach
nur die Vector Checksumme nicht. Die ist ebenfalls in UM10360.pdf
definiert. Keil kann IIRC auch Programme nur aus dem RAM ausführen, dann
wäre der Flash leer.
Hmmm ich glaub du hattest mich ein wenig missverstanden, hatte ich aber
vielleicht auch falsch formuliert. Ja er springt in die Adresse
0x1FFF... also in den ROM. Ok das dort der Boot-Loader sitzt, wusste ich
zu bis dato nicht. Jedenfalls das funktioniert!
Nur das Problem ist, dass er vom Boot-Loader nicht mehr zurück in den
User-Code springt :-/ Hab schon ein wenig im OMF rumgesucht, aber nicht
so recht die Erklärung gefunden. Hab auch schon mit MEMMAP-Register
versucht, ohne Erfolg...
Vielleicht stehe ich auf völlig auf dem Schlauch. Brauche Hilfe ;)!
StudentinHH schrieb:> Ich habe ein Evaluierungsboard mit einem LPC1769(Cortex M3) von NXP und> will diesen mit Hilfe eines ULINK2 über Keil programmieren.
Tja, immer wieder dasselbe Problem: Anfänger wollen partout NICHT am
Anfang anfangen, sondern meinen, selbigen generös überspringen zu
können, die schlaue IDE soll's richten, so daß es trotzdem klappt.
Mir ist bei deinem Beispiel durchaus klar, daß es der ULINK2 einem jeden
Programmierer besonders schwer macht, denn er ist von hause aus eben nur
mit der hauseigenen IDE benutzbar. Seit kurzem gibt es allerdings eine
alternative Firmware für den ULINK2, mit der er auch mit dem
Standalone-Programmiertool von Coocox benutzbar ist.
Dein Anfängerfehler besteht darin, daß du dir bislang überhaupt keinen
Gedanken gemacht hast über den ganzen Startup-Mechanismus, also all das,
was abgeht BEVOR die CPU erstmalig den Vektor 0 (SP) und Vektor 1
(Kaltstart) in ihre Register bekommt.
Um sowas zu erlernen braucht man keinen Debugger, sondern nur die
Lektüre des RefManuals. Ich geb dir mal nen allgemeinen Abriß:
- Start der CPU in den eingebauten Bootlader
- Erkennung des/der Bootmode-Pins, JTAG-Pins/SWD-Pins
- Test der vorhandenen Vektoren und deren Prüfsumme
- Entscheidung ob Bootlader/Debug/Run anhand der bisher gesammelten
Infos
- wenn nix anderes anliegt, dann Laden von Vektoren 0 und 1, also Run.
So, das war mal ganz allgemein formuliert. Wie es bei deinem µC ganz
konkret abläuft, findest du in den Dokus von NXP. Du siehst daraus, daß
es ein ganz erhebliches Vorspiel gibt, bevor dein Startup-Code
ausgeführt wird.
W.S.
W.S. schrieb:> So, das war mal ganz allgemein formuliert. Wie es bei deinem µC ganz> konkret abläuft, findest du in den Dokus von NXP. Du siehst daraus, daß> es ein ganz erhebliches Vorspiel gibt, bevor dein Startup-Code> ausgeführt wird.
Aber die IDE soll doch dazu da sein, um nicht selber das ganze Vorspiel
immer wieder machen zu müssen, oder wollen wir wieder zurück und nur mit
einfachen Editoren programmieren? Obwohl das auch cool ist, ich liebe
den emacs auf Linux.
Was ich aber hasse, dass sind selber die make-Files schreiben oder mir
die ganzen Compileroptionen zu merken. Nicht imemr kommt dann das
richtige bei raus. Aber ich geb Dir recht - wenn man nicht mal auf
unterer Ebene das alles gemacht hat, dann versteht man auch die ganzen
Einstellungen in der IDE nicht.
@StudentinHH: Ich kann mich also dem nur anschließen - es ist, als ob Du
gleich Integral- oder Differentialrechnung machen willst, ohne vorher
die Grundrechenarten und lineare Algebra gemacht zu haben, die Lücken
sind einfach zu groß noch bei Dir.