Hallo. Ist es möglich, die länge eines im flash ROM abgelegten Datensatzes zur laufzeit zu bestimmen ? Bis jetzt verwende ich immer sizeof(), das wird aber (wenn ich es richtig weiss) vom coprozessor schon rausgeschnissen und durch die zahl ersetzt. Ich brauche aber die Länge zur Laufzeit, da das HEX File nach dem compilieren und linken noch bearbeitet wird (Der Flash ROM bereich). (ich verwende WINAVR-GCC auf einem ATMega16) MfG Simon
wenn es sich um einen Null-terminierten String handelt, kann man strlen benutzen. ciao, Stefan.
entweder wie schon beschrieben durch einen terminierenden char oder wenn jeder char in den daten enthalten sein kann plane ein entsprechend grosses size feld am anfang der daten ein, dass dann entsprechend aktualisiert wird
Hi ich habs nicht verstanden. sizeof() bestimmt ja nur die Größe eines Datentypes bzw. Arrays. Und was willst du jetzt genau zur Laufzeit herausfinden? BTW: sizeof() wird AFAIK nicht vom Präprozessor ausgewertet. Zumindest wirft es der GCC beim Aufruf mit -E noch mit aus. Wär auch schwierig denn der Präprozessor weis eigentlich nichts über den Syntax der Sprache. Matthias
@Matthias ich habe einen String im flash ROM und dessen (aktuelle) länge brauche ich zur Laufzeit. (d.h. die Array Länge). Ich weiss nicht genau von was der wert (mit der funktion sizeof() ) errechnet wird aber die hauptsacht ist ja, das sie nicht zur laufzeit berechnet wird, was in den meisten fällen so auch gut ist. Wird eigentlich im intelhex-format die gesamtlänge der datei irgendwie festgehalten ? oder kann ich einfach im nachhinein die datei bearbeiten und an der stelle wo mene flash daten stehen was anderes hin schreiben? (denk mal so einfach gehts nicht, da sin ja sicher noch crc's oder so drinn) PS::hab grad bemerkt in meinem letzten thread hatte ich coprozessor geschrieben, damit meinte ich natürlich den präprozessor. hatte mal wieder was falsches im kopf ;) MfG
> ich habe einen String im flash ROM und dessen (aktuelle) länge > brauche ich zur Laufzeit. (d.h. die Array Länge). Dir ist die Funktion strlen bekannt? (Beim Gebrauch die Harvard-Architektur der AVR-Prozessoren berücksichtigen!)
Hi mit strlen_P kannst du die Länge eines nullterminierten Strings im Flash zur Laufzeit bestimmen. So einfach was ins Intel-Hex einzupflücken geht nicht. Wenn du damit Teile deines Programmcodes verschiebst schon garnicht. Ich gehe üblicherweise den Weg über eine Binärdatei. Mittels avr-objcopy aus dem Intel-Hex eine Binärdatei machen, die wie gewünscht bearbeiten und dann wieder mit avr-objcopy ein Intel-Hex erstellen. Matthias
@Matthias: So würd ichs ja auch machen, wenn ich das nur 1x machen müsste. Aber ich will ein Programm schreiben, dass das erledigt. Das will ich wahrscheinlich später mal verkaufen und ich kann ja schlecht den avr-objcopy verkaufen. Mein Programm muss als aufgabe ein HEX file haben. MfG
Sorry, hab mich verschriben. soll heissen: Mein Programm muss als ausgabe ein HEX file haben.
Hi du sollst ja nicht avr-objcopy verkaufen. Du steuerst mit deinem Programm avr-objcopy und legst es einfach bei. Oder investierst zwei Stunden und schreibst einen Parser für Intel-Hex und ein paar Funktionen die Intel-Hex wieder schreiben, Matthias
Das mit avr-objcopy verkaufen war auch so gemeint. ich verkaufs ja schließlich dann mit. Ja, ich denk so werd ichs auch machen. kenntst du eine doku zum ihex format ? MfG
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.