Hallo! Mein µC-Programm ist jetzt soweit lauffähig, dass u.a. Flash-Lesen und -Schreiben funktioniert. Ich habe jetzt die vorletzte Flashseite genommen. Um es schön zu machen, würde ich gerne wissen, ob die jew. Seiten bereits benutzt werden. Wie kann ich dass mit dem LPC2468 realisieren? Und gibt es einen Befehl (im C), um den Controller zu resetten bzw. dessen Programm neu auszuführen? Ich konnte in der Hilfe nix dazu finden...
Andreas Schneider schrieb: > Und gibt es einen Befehl (im C), um den Controller zu resetten bzw. > dessen Programm neu auszuführen? Ich konnte in der Hilfe nix dazu > finden... Einen solchen Befehl kenne ich zwar nicht, aber ich würde einfach den Watchdog anwerfen, bzw. dessen Zurücksetzen unterbinden, wenn er denn schon laufen sollte. Das führt garantiert innerhalb kürzester Zeit zum Reset.
Andreas Schneider schrieb: > Mein µC-Programm ist jetzt soweit lauffähig, dass u.a. Flash-Lesen und > -Schreiben funktioniert. Ich habe jetzt die vorletzte Flashseite > genommen. Um es schön zu machen, würde ich gerne wissen, ob die jew. > Seiten bereits benutzt werden. Wie kann ich dass mit dem LPC2468 > realisieren? Wenn du deinem Linker nicht mitteilst, dass an der entsprechenden Adresse noch Flashspeicher ist, wird er ihn auch nicht benutzen und du hast ihn ganz für dich alleine.
Danke, skriptkiddy! Idee ist umgesetzt und läuft super! @telekatz Das klingt spannend... In der IDE habe ich leider nur die Option, die Startadresse hochzusetzen, einzelne Bereiche rauszunehmen klappt irgendwie nicht. Damit wäre aber der Bootsektor im beschreibbaren Bereich - ist das okay? oder kann ich bedenkenlos einen anderen Chip angeben? scheint nicht so: "The Adress is not in Flash" (bei einem Chip mit kleinerem Flashspeicher)
So, ich noch mal: Angeblich nimmt der Linker nicht den obersten Flashsektor (Nr. 27). Hab testweise etwas reingeschrieben und das Programm neu aufgespielt, meine Informationen sind aber dennoch weg... [edit] oder liegt das daran, dass das Flash-Löschen Controllerseitig passiert? Oder wird der zu löschende Speicherbereich von der IDE benannt?
Wie programmierst du den Flash? Und welche IDE verwendest du?
Naja, das macht soweit alles meine IDE, die HITOP5. Ich speichere nur ein paar Sachen in einem einzigen Sektor.
Andreas Schneider schrieb: > Naja, das macht soweit alles meine IDE, die HITOP5. Ist dort nicht auch die GNU-Toolchain im Hintergrund? Wenn ja, wird die Entwicklungsumgebung wohl intern ein tempörares Linker-Skipt erzeugen, deren Dateiname dann dem Linker übergeben wird. Falls man die Größe eines Speicherbereichs (Adressebereich des Flash-Speichers) nicht in der IDE vorgeben kann, kann man dies evtl. in einem eigenen Linker-Skript machen, sofern die IDE zulässt eines vorzugeben. Der Linker bricht dann mit einer Fehlermeldung ab, wenn der Speicherbereich nicht ausreicht. > Ich speichere nur ein paar Sachen in einem einzigen Sektor. Evtl. wird durch die Programmiersoftware der gesamte Flash-Speicher vor der Übertragung des Anwendungscodes gelöscht. Falls man der IDE nicht mitteilen kann, dass nur bestimmte Sektoren gelöscht werden sollen, kann man wenig machen. Am Einfachsten dürfte es sein, beim Lesen der Konfigurationsdaten auf leeren Flash zu prüfen (0xff) und dann auf Standardwerte zurückzugreifen, die im Programm hinterlegt sind.
Ja, die GNU Toolchain läuft im Hintergrund. hab aber keinen Plan davon... Ich hab versucht, die Flash-Definitionen in der Hitop-XML zu ändern, z.B. die letzte Flashpage auszuklammern ö.ä., aber es kommt immer die Fehlermeldung "The Adress is not in Flash" Eigenartigerweise will Hitop nichts in den Sektor 27 (7D000-7DFFF) schreiben, und lt. Anleitung beginnt der Bootblock erst ab 7E000 - dennoch scheinen da irgendwelche Informationen zu sein, die wichtig sind...
Ok, ich hab mir jetzt 50k Zeilen Adressen und Opcode reingezogen (Dissasembly-Tab im Hitop), nach der Liste steht ab Sektor 10 (das ist 18000+) nicht mehr ausser FF's. Warum er mir dann beim Schreiben in einen der hohen Sektoren Fehler reinbaut, ist mir unklar...
Dieser CCLK, der bei der Speicherroutine angegeben werden muss/soll - ist damit der Systemclock (also Bus, ~14MHz) oder der CPU-Takt (~72MHz) gemeint?
Andreas Schneider schrieb: > Dieser CCLK, der bei der Speicherroutine angegeben werden muss/soll - > ist damit der Systemclock (also Bus, ~14MHz) oder der CPU-Takt (~72MHz) > gemeint? Es ist der CPU-Takt uebrigens, wie kommst Du auf 14 MHz Bus-Clk? 18 MHz als default wuerde ich verstehen aber 14 und 72 passen irgendwie nicht zusammen. Robert
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.