Hallo zusammen, ich habe hier ein merkwürdiges Problem mit einem AT89C51ED2. Dieser hat 64k internes Flashrom. Mein Programmcode ist ziemlich umfangreich, ca. 60k bedingt durch viele Textstrings, die in unterschiedlichen Sprachen dargestellt werden müssen. Ich mußte nun eine Erweiterung am Programm vornehmen und dieses war nun ca. 62k groß. Der Prozessor startete nicht mehr. Wenn man das Programm wieder verringerte, indem man z.B. eine komplette Sprache aus dem Programm nahm, damit es unter 62k groß war, lief es einwandfrei. Hat jemand schon etwas ähnliches beobachtet? Bei Atmel und hier im Forum wurde ich nicht fündig. Stefan
Ab F800h (63488 dez.)liegt der interne Bootloader. Vermutlich kommst Du damit in Konflikt. MW kann man den nicht löschen oder überschreiben.
Matthias K. schrieb: > Ab F800h (63488 dez.)liegt der interne Bootloader. Vermutlich kommst Du > damit in Konflikt. Aber erst, wenn man ihn versehentlich enabled, also das ENBOOT-Bit setzt. Peter
Peter Dannegger schrieb: > Aber erst, wenn man ihn versehentlich enabled, also das ENBOOT-Bit > setzt. Sicher? Die Flash-Api-Funktionen liegen auch da oben, die lassen sich auch aus der Application aufrufen.
> Sicher? Die Flash-Api-Funktionen liegen auch da oben, die lassen sich > auch aus der Application aufrufen. Aber nur, wenn das Bootloader-ROM in die letzten zwei kB gemappt wird -> siehe Datenblatt. Ralf
Hallo Matthias, hallo Peter, danke Euch beiden für den Hinweis, das war die Ursache. Jetzt funktioniert es. Das Häckchen in FLIP ist gerade umgekehrt: Ist es gesetzt, dann ist BLJB = 0 und der Bootloader startet. Ist es nicht gesetzt, dann ist BLJB = 1 und die Userapplication startet. Stefan
Stefan Kaspar schrieb: > Das Häckchen in FLIP ist gerade umgekehrt: Ist es gesetzt, dann ist BLJB > = 0 und der Bootloader startet. Ist es nicht gesetzt, dann ist BLJB = 1 > und die Userapplication startet. Hat eigentlich nichts mit dem Ursprungsproblem zu tun(?)
Doch. Man kann den Factory-Bootloader starten, die Applikation starten oder nen User-Bootloader starten. Setzt man den Bootvektor auf 0x00, dann starten man quasi den User-Bootloader auf Adresse 0x0000 mit den API-Funktionen enabled. Peter
Peter Dannegger schrieb: > Doch. > Man kann den Factory-Bootloader starten, die Applikation starten oder > nen User-Bootloader starten. > Setzt man den Bootvektor auf 0x00, dann starten man quasi den > User-Bootloader auf Adresse 0x0000 mit den API-Funktionen enabled. Ich nehme nicht an, dass der Ursprungsposter dies umgesetzt hat. Mit Flip und interen Bootloader habe ich es auch nicht geschafft, was oberhalb F800H in den Flash zu bekommen.
Ich verwende den internen Bootloader und Flip, ich habe keinen eigenen Bootloader und im Programm rufe ich auch keine Funktionen des Bootloaders auf. Tatsächlich funktioniert jetzt das Programm, nachdem ich das Flag in FLIP gelöscht habe, der Code geht jetzt bis 0xF840. Laut dem Datenblatt von Atmel startet der Bootloader, wenn die Hardwarebedingungen gesetzt sind oder BLJB = 0 (in FLIP Häkchen gesetzt) und BSB <> 0 und SBV = 0xFC. Vor der Programmerweiterung war bei mir über FLIP BLBJ = 0 (Häkchen gesetzt), aber die Userapplication ist trotzdem gestartet, ohne Probleme. Stefan
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.