länge zur Laufzeit

Gast #145667
Lesenswert?

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
Gast #145669
Lesenswert?

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
Gast #145670
Lesenswert?

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
Gast #145671
Lesenswert?

@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
Gast #145672
Lesenswert?

> 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!)
Gast #145673
Lesenswert?

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
Gast #145674
Lesenswert?

@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
Gast #145676
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren