mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik länge zur Laufzeit


Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn es sich um einen Null-terminierten String handelt, kann man strlen
benutzen.

ciao, Stefan.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hab mich verschriben.
soll heissen:
Mein Programm muss als ausgabe ein HEX file haben.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Hans Ouschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
darauf hätt ich auch selber kommen müssen.
Trotzdem Danke !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.