Hallo zusammen, jetzt hätte ich noch eine andere Frage: Ich schreibe hier gerade einen Bootloader, der bei Reset die Pipeline anhält, alle Daten aus dem Flash ins RAM kopiert, dann die Pipe wieder startet. Danach wird aller Code aus dem RAM ausgefüht. Mein einziges Problem ist die Abbruchbedingung: Wie würdet Ihr eine entsprechende Abbruchbedingung verfassen, damit der Bootloader erkennt, dass das Programm zuende ist und er mit Kopieren aufhören kann? Im Moment werden einfach die ersten 20 x 32Bit aus dem Flash ins SDRAM kopiert (die Programme haben momentan einfach nicht länger zu sein ;-) ) Aber wie könnte ich das Programmende erkennen? Danke für Eure Hilfe und viele Grüße Martin
> Aber wie könnte ich das Programmende erkennen? Das wird ganz gern über irgendwelche Magic-Codes gemacht, z.B. zwei 32-bit-Integer mit 0xDEADBEEF 0xBADCABlE Siehe auch: http://en.wikipedia.org/wiki/Hexspeak und: http://en.wikipedia.org/wiki/Magic_number_(programming) Wenn dieser Code kommt, ist der Bootloader zuende. Du mußt allerdings beim Build-Prozess des Bootloaders diesen Magic-Code hinten mit dazulinken.
und dann mußt du noch verhindern das keine "Magic-Codes" im normalen Kontext vorkommen... Sonst wird nachher nur die Hälfte geschrieben... Man kann auch mit Paketen fester Länge arbeiten. 1. Paket: "Ich schicke jetzt x pakete mit Länge y 2. bis x: Daten
> und dann mußt du noch verhindern das keine "Magic-Codes" im normalen > Kontext vorkommen... Scheint trotzdem weltweit recht gut zu funktionieren ;-) Da kann man eigentlich nur mit Wahrscheinlichkeiten operieren. Je länger der Magic-Code, umso unwahrscheinlicher wird der fall, dass er im "normalen" Programm vorkommt.
> das erste Byte als längenangabe Sowas kommt bei zuviel AVR-Frickelei raus. Wenn dann vielleicht das erste Wort.
> Wenn dann vielleicht das erste Wort. Wie breit ist ein Wort? ;-) Ein Byte kann auch ein Wort sein: http://de.wikipedia.org/wiki/Datenwort
> > Wenn dann vielleicht das erste Wort. > Wie breit ist ein Wort? ;-) 32-bit-CPU... Wer lesen kann ist klar im Vorteil.
> 32-bit-CPU...
Der PC hat auch eine 32 Bit Architektur, und trotzdem:
Zitat aus og. Quelle
1 | Der Begriff Word (bzw. Wort) wird auch in der Windows API für eine 16-Bit-Zahl verwendet. |
> Wer lesen kann ist klar im Vorteil. Zur Abwechslung diese Quelle: http://en.wikipedia.org/wiki/Integer_(computer_science) Und hier ist word gleichwertig bei 16 und 32 Bit angegeben. BTW: bei mir ist ein Wort immer so breit, wie ich das gerade brauche. Ich arbeite hier im Augenblick mit 18-Bit-Worten.
> BTW: > bei mir ist ein Wort immer so breit, wie ich das gerade brauche. Ich > arbeite hier im Augenblick mit 18-Bit-Worten. Es lebe die selige BESM-6. Die hatte 48-Bit-Worte. Wie breit war da wohl ein Wort... Richtig... 48 Bit... Und nun rate mal, wie breit ein Wort bei einer 32-bit-CPU ist.
> Der Begriff Word (bzw. Wort) wird auch in der Windows API
BTW: Den IT-Oberblindfisch Bill Gate$ heranzuziehen, wär mir ja
peinlich.
32-bit-CPU wrote:
> BTW: Den IT-Oberblindfisch Bill Gate$ heranzuziehen, wär mir ja peinlich.
Du hast den Namen zuerst ins Gespräch gebracht, wie peinlich ... ;-)
Nicht Microsoft hat den Begriff word für 16-Bit Register auf einer
32-Bit-CPU ins Spiel gebracht, sondern Intel mit Registern wie EAX, AX,
Al und AH, und Befehlen wie CBW und CWD. Was blieb M$ da schon anderes
übrig, als die vermurkste Definition zu übernehmen.
Ich korrigiere mich auf "Man kann auch die ersten 32bit als Längenangabe interpretieren" ;)
> sondern Intel mit Registern wie EAX, AX, Al und AH, und Befehlen wie CBW > und
CWD.
Diese Designkrüppel gehören m.E. auf den Müllhaufen.
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.