äh... Du willst sowas haben wie dynamisch nachladbare Module??? Oder einfach komplett alles überpinseln?
Hallo!
Hat das schon mal jemand gelöst, wie man via Bootloader Daten ins Flash - sprich zum ausführbaren Pogramm dazupacken kann ?
Wenn ja, wie
Und dann noch am Liebsten in C statt asm ....
Liebe Grüße,
Vajk
Ich kann mir keine Signatur leisten - bin selbständig!
äh... Du willst sowas haben wie dynamisch nachladbare Module??? Oder einfach komplett alles überpinseln?
Disclaimer: none. Sue me.
genau, "dynamisch nachladbare Module" (ich weiß 10.000er Grenze) aber das wärs, auswechselbare Daten (hinterm Code) ...
Ich kann mir keine Signatur leisten - bin selbständig!
Dann brauchst du
1. einen dynamischen Linker
2. einen Compiler, der position independent code (pic) macht
3. deine Applikation muss die vorhanden Module verwalten können und wissen, welche sie braucht/nachladen muss/wegwerfen kann.
Am einfachsten ist wohl 3. Für Punkt 2 musst du dir nen Compiler besorgen, der das kann (avr-gcc kann es nicht). Nen dynamischen Linker musst du auch schreiben/besorgen.
Disclaimer: none. Sue me.
ömpf .. tnx
einfach die Daten an den HexCode anhängen geht nicht ?
Einfach nach einer "Startsequenz" suchen lassen ... dem Code könnte man doch seine Größe mitteilen ... oder liege ich da falscch.
Unter Win hab ich so schon einen Kopierschutz gemacht, der die Exe eben nachträglich an bestimmten Stellen verändert ...
Ich kann mir keine Signatur leisten - bin selbständig!
Es ginge, wenn der Code immer ab einer festen Position im Flash liegt. Dann geht es auch ohne dynamischen Linker. Der Bootloader des Butterfly (und freie Klone, wie buttload) sind eigentlich in ihrem Kern, das was Du suchst.
Das Problem ist ja nicht, den Hex-Code anzuhängen, sondern den Code zu lokatieren bzw. er muss so generiert sein, daß er unabhängig von seiner Lokatierung ist. Ausserdem muss die Anwendung, die das Zeug lädt, wissen, wo sie das Zeug findet.
Am einfachsten geht das mit Daten, die unabängig von Lokatierungen sind (also keine Sprung- oder Codeadressen oder sowas enthalten). Typisches Beispiel sind Kalibrierungsdaten. Die Daten werden fest irgendwo ins Flash lokatiert und die Applikation kann darauf zugreifen bzw weiß, wo die Daten liegen (werden). Nach der Kalibrierung werden die Daten an diese Stelle geflasht (Bootloader oder wie auch immer). Um den Ort festzulegen, legst du die Daten in eine eigene Section, deren Ablageort du im Linker Description File festlegst (bei avr-ld zumindest). Alternativ lokatierst du das Zeug ins Flash und übergibst dem Bootloader die Adresse.
Einige Makros zur Bootloader-Unterstützung findest du im Header avr/boot.h.
Disclaimer: none. Sue me.
Relozieren muss der Loader nur, wenn die Adressen sich ändern können (sollen). Wenn die Adresse des Moduls im Speicher bekannt ist, geht das auch ohne Relokation. Es schränkt natürlich die Anwendungsmöglichkeiten drastisch ein.
Lesezeichen