Vielleicht kann mir ja hier jemand helfen... Ich habe einen SD Card Bootloader für den p24HJ256GP210. Funktioniert auch. Nun möchte ich den Bootloader vor überschreiben durch die Applikation schützen. Ich verwende C30. Laut Datenblatt ist der Schreibschutz nur wirksam wenn ein Bootsegment definiert ist, d.h. obwohl ich die ganzen CodeGuard features eigentlich nicht verwenden möchte, muß ich diese entsprechend konfigurieren. Weiterhin habe ich mittlerweile verstanden das jede Funktion des Bootloaders mit dem entsprechenden "Boot Attribut" versehen werden muß damit diese auch im Boot Segment abgelegt wird (und nicht im General Segment). Compiler Libraries können auch nicht verwendet werden, d.h. ich muss für z.B. free und malloc eine andere Lösung finden. Hier meine Fragen: - Ist es wirklich so kompliziert? - Gibt es keine einfachere Möglichkeit einen bestimmten Bereich im Flash als Schreibgeschützt zu definieren? Danke!
Hallo Booty, ich stehe vor dem selben Problem! Sobald man über die Configuration Bits das CodeGuard aktiviert, muss man für jede funktion "__attribute__ ((boot)) schreiben. z.B. void _attribute_ ((boot)) main(void){...} Das reicht aber noch nicht. Problem ist, dass der Linker den C Starup Code NICHT in das Bootsegment schreibt, sondern direkt danach. Folglich springt der Controller erst mal in den Ungeschützden Bereich NACH dem Bootloader, macht dort C Startup, und springt dann wieder zurück in den Bootloader. Was natürlich quatsch ist, wenn man nen sicheren Bootloader haben will. Im Linker script seieh man oben folgende Zeilen: CRT0_STARTUP(crt0_standard.o) CRT1_STARTUP(crt1_standard.o) Man sucht sich die crt0_standard.S aus dem libpic30.zip im C30 ordner und kopiert sie ins Projekt. Nennt sie ggf. um und bearbeitet in ihr folgende Zeile (30): .section .boot_resetvector, code um in: .section .boot_resetvector, code, boot ; optional noch dazu: ADDRESS(0x200) Im Linker script dannnoch den Dateinamen anpassen in die entsprechende .o Dann ist schon mal der startup code an der stelle wo man möchte. Allerdings noch nicht ganz! Wenn man sich die crt0_standard.S ansieht, greift sie in ziele 70 auf eine funktion namens "__data_init_standard" zu. Diese ist wie ich herausgefunden habe ebefalls in der libpic30.zip in der datei "data_init_standard.S" enthalten. Diese wird wegen dem fehlenden boot ebenfalls ins General segment gelegt. Also ist man weider fast so weit wie zufor! Leider kann man diese nicht so einfach ins Projekt einbinden und umschreiben. Weil der Linker selbstständig darauf zugreift... Wenn uns das noch gelingen würde, wäre das Problem gelöst. Evtl kommt ja von euch jemand drauf!?
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.