Forum: Mikrocontroller und Digitale Elektronik Probleme mit LPC1769(Arm Cortex M3) und Keil


von StudentinHH (Gast)


Angehängte Dateien:

Lesenswert?

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 :)

von Jim M. (turboj)


Lesenswert?

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.

von StudentinHH (Gast)


Lesenswert?

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 ;)!

von StudentinHH (Gast)


Lesenswert?

*OMF = UM10360 :D

von Jim M. (turboj)


Lesenswert?

In Deinen "Download Options" fehlt der Haken bei "Download to Flash".

von W.S. (Gast)


Lesenswert?

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.

von Anfänger (Gast)


Lesenswert?

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.

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.