Hallo, ich habe derzeit ein Problem mit einem LPC2478. Meine Applikation (einige Daten über die UART empfangen, ein paar Tasten auslesen und diverse Werte auf einem TFT ausgeben) habe ich soweit ziemlich stabil in Betrieb. Jetzt habe ich noch einen SD-Karten Bootloader (NXP Application Note AN10835) implementiert. Den Bootloader habe ich fix und fertig so übernommen - habe nur ein paar Anpassungen bzgl. der Ports usw. getätigt. Den Bootloader habe ich erstmal mit der Keil Demo übersetzt, meine eigentliche Applikation habe ich aber mit WinArm erstellt. Der Bootloader funktioniert auch soweit. Ich kann mein Applikationsprogramm mit WinArm übersetzen, die Binätdatei auf die SD-Karte schieben und anschließend den Controller über das Bootloader Terminal flashen. Das Applikationsprogramm wird eigentlich auch korrekt ausgeführt, allerdings mit einem kleinen (oder besser gesagt GROßEN) Haken... Ich habe im internen RAM ein paar große Arrays angelegt, in denen ich div. Werte zwischenspeichere. Nun tritt das Phänomän auf, dass diese Werte teilweise willkürlich überschrieben und verändert werden. Die Größen der Arrays und auch der Zugriff über irgendwelche Pointer etc. habe ich bereits mehrmals überprüft - alles io. Ich steh inzwischen wirklich auf dem Schlauch... Noch ein paar Fakten: --------------------- Der Bootloader ist auf 0x00000000 gelinkt. Die Applikation ist auf 0x10000 gelinkt. Der RAM-Bereich der Appliaktion beginnt ab 0x40000040 Im Startup File der Applikation kopiere ich die Exception Vectors nach 0x40000000 und aktiviere das Memory Mapping. Was ich nun durch rumspeilen festgestellt habe ist folgendes: Wenn ich im Linkerskript des Applikationsprogrammes den RAM-Bereich erst bei 0x40000100 (anstatt bei 0x40000040) beginnen lasse, funktioniert alles einwandfrei. Irgenwo und irgendwie kommt sich etwas in die Quere. Im MAP-File konnte ich allerdings nichts Verdächtiges feststellen. Probleme mit dem Stack schließe ich inzwischen auch aus, da ich diese Bereich zum testen z. Zt. alle auf 0x400 stehen habe... Hat jemand von Euch eine Iddee? Gruß, Christian
>Was ich nun durch rumspeilen festgestellt habe ist folgendes: >Wenn ich im Linkerskript des Applikationsprogrammes den RAM-Bereich erst >bei 0x40000100 (anstatt bei 0x40000040) beginnen lasse, funktioniert >alles einwandfrei. >Irgenwo und irgendwie kommt sich etwas in die Quere. >Im MAP-File konnte ich allerdings nichts Verdächtiges feststellen. Wenn der Bootloader das neue Programm geflasht hat solltest du dringend einen Reset z.B. durch Watchdog oder so durchführen. Machst du das?
Hallo Holger, erstmal danke für die Rückmeldung. Nein, z. Zt. springe ich nach dem Flashen direkt zur Applikation. Deinen Vorschlag werde ich mal ausprobieren. Du meinst also, dass nach dem Flashen evtl. irgendwelche Resourcen noch nicht freigegeben sind? Gruß, Christian
>Du meinst also, dass nach dem Flashen evtl. irgendwelche Resourcen noch >nicht freigegeben sind? Nein, ich meine das dein Bootloader dieselben Resourcen benutzt wie deine Applikation. Der weiss möglicherweise gar nichts von deiner Applikation. Und dann überschreibt er dir halt RAM Bereiche weil er sie selber auch nutzt. Also sauberen Reset hinlegen damit aufgeräumt wird.
Achso - nein. Der Ablauf bei meinem Prog. ist folgender: 1. Reset 2. Bootloader startet (immer) 3. Flashen der Applikation (falls gewünscht) 4. Sprung nach 0x10000 4.1 Neuinitialisieung des Controllers, Applikation Die Applikation selbst kann den BL nicht mehr aufufen. Das heißt, dass der BL nach dem Start der Applikation tod da liegt - der wird bis zum nächsten Reset ja nicht mehr verwendt und läuft ja nicht mehr. Hab ich da evtl. noch was nicht beahtet? Gruß, Chistian
>Der Ablauf bei meinem Prog. ist folgender: > >1. Reset >2. Bootloader startet (immer) >3. Flashen der Applikation (falls gewünscht) >4. Sprung nach 0x10000 >4.1 Neuinitialisieung des Controllers, Applikation Ok, räumt der Bootloader auch hinter sich auf? Also benutzte Interrupts ausschalten, UART abschalten, DMA abschalten usw? Das volle Programm. Bevor du in die Applikation springst sollte der Controller so sauber sein wie nach einem Reset.
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.