hi, ich bin grad dabei nen bootloader für den M68HC912BC32 zu schreiben. Ich verwende den C-Compiler von Cosmic. Irgendwie klappen die Flashroutinen net so wirklich. Der überschreibt mir dem kompletten Flash, auch den geschützten bootblock mir irgendwas. Danach geht dann nichts. hat jemand sowas schon realisiert und kann mir ev. helfen. danke und gruss, schorschi.
Hi, Mass Erase verwendet? Damit löschst du alles, auch den Bootloader. Richtig ist Sector Erase, löscht nur 256 Byte (beim C32) ab der angegebenen Adresse. Bei weiteren Problemen meld dich nochmal. Christian
hi, wie mach ich denn ein sector erase? ich habe noch irgendwie ein grundsätzliches problem. muss ich ev. irgendiwie den µC langsamer laufen lassen beim löschen bzw. flashen? Denn beim flashen schreibt er mir auch den kopletten flas mit irgendwas voll. Hast du ev. etwas beispielcode? Gruss und danke, schorschi.
Hallo, lad dir eifach mal die Application Notes AN2153 und AN2720 von der Freescale Webseite runter. Dort ist alles sehr gut erklärt, außerdem kannst du den Code übernehmen. Eine weitere Fehlerqueller könnte sein, dass du den Code zum Löschen und Schreiben aus dem Flash anstatt aus dem Ram ausführtst. Also den "Flashtreiber" ins Ram linken (geht mit gut mit Cosmic!), vor der Aktion auch wirklich kopieren und schon sollte se klappen. Viel Erfolg! Christian
hi, jap. Dass es nicht im Flash läuft hab ich jetzt auch rausgefunden. Sobald ich auf den flash zugreife habe ich nur noch bezug auf das ram. allerdings kann ich den bootloader nicht einfach ins ram linken. ich muss diesen beim start des flashvorgangs ins ram kopieren und von dort aus starten. Danke für deine Hilfe. Gruss, schorschi.
> allerdings kann ich den bootloader nicht einfach ins ram linken.
Doch, als "moveable code". Der Code liegt im Flash, die Adressaufrufe
werden aber so gestaltet, dass die Adressen im Ram, wo die Funktionen
hinkopiert werden sollen, angesprungen werden.
Funktioniert mittels '-ic' im Linkerfile, Beispiel aus dem Cosmic
User Guide.
# LINKER EXAMPLE FOR MOVEABLE CODE
#
# mark this segment with -ic and link it at RAM address
#
+seg .text -b 0x100 -n boot -ic
flash.o
+seg .text -b 0x8000 -n code # application code
hi, verstehe ich dass richtig dass ich mit aufruf dieses linkerkommandos der code im flash bleibt und automatisch im RAM ausgeführt wird? So dass ich im Prinzip diesen code nicht von Hand in den RAM kopieren muss? Oder wird der code nur so gelinkt dass dieser nicht mit absoluten Adressen läuft? Und ich dann diesen manuell in den Ram kopieren muss. gruss und danke, schorschi.
Schorschl && Christian Liege ich in der Annahme Richtig, das der Bootloader in jedem Mikrocontroller der HC12 Serie benutzt werden könnte? Ich arbeite mich grad in den MC9S12NE64 ein. Gruss Sven
@Schorschl Der Code muss noch ins Ram kopiert werden. @Sven Wäre grundsätzlich möglich, zumindest muss für einen anderen HC(S)12 Typ ein neues controllerspezifisches Headerfile eingebunden werden.
@Christian Also wie AVR Serie. Hatte schon fast an Prozessor Serien Übergreifenden Code Gedacht. Gruss Sven PS: Kurze Frage, wie schnell arbeitet denn der 9S12 Core die Befehle ab? Wie viele Takte Pro Befehl.
hi, also doch in den RAM kopieren. Wozu dann der linkeroperator. ich brauche dann doch eher nen compileroperator der mir den code so kompeliert dass dieser mit lokalen adressen läuft. nen bootloader für nen HCS12 habe ich auch schon gemacht. ist dort viel einfacher da gepageder flash. gruss, schorschi.
Hallo, der Linkeroperator ist bei Verwendung von mehreren Modulen notwendig. Dem Compiler sind während des Übersetzens die externen Adressen nicht bekannt! Der Linker ersetzt die Sprungadressen im Objectcode während des Link-Vorgangs. z.B. wenn main() und die Flashroutinen in verschiedenen Modulen (c-files) vorhanden sind, ist der Linkeroperator absolut unerlässlich. Gruß
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.