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 ;)!
In Deinen "Download Options" fehlt der Haken bei "Download to Flash".
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.