mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik hexfile1 in hexfile2 "integrieren"


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, mir fällt echt kein intelligenterer Titel ein...

Ich muss "leider" für mein avr projekt von linux auf windows umsteigen 
und sehe mich mit ein paar Problemen konfrontiert.

Im Prinzip sieht das ganze so aus, dass es eine Software für einen 
kleinen Slave-Controller und eine Software für einen großen 
Mastercontroller gibt, die ich unabhängig voneinander entwickelt habe.

Der Große controller flasht die kleinen sobald sie erkannt werden via 
isp/spi. Dafür hab ich es bisher so gemacht, dass in einem kleinen shell 
script die software für den kleinen controller in das hexfile des großen 
controllers mit offset eingebunden wird.


Ich richte mich nun aktuell mit eclipse + avr plugin ein unter windows 
und frage mich deshalb, ob es eine möglichkeit gibt das von mir 
beschriebene auch "einfacher" zu erhalten (sowas wie dem linker zu sagen 
die compilierte software vom kleinen controller mit offset als section 
in das große hexfile zu laden.)

Damit mich wenigstens vielleicht irgendwer versteht häng ich mal das 
(von vor jahren entstandene, ich checks ja schon selber nimmer :( 
buildscript an):


...
make
....

cd /master-controller/Hexfiles/

avr-objcopy -I binary -O ihex master.bin master.hex

SIZE=`wc -l master.hex | awk {'print $1'}`

((SIZE--))

head -$SIZE master.hex >> master+slave.hex

echo :020000021C00E0 >> master+slave.hex

cat /slave-controller/Hexfiles/slave.hex >> master+slave.hex

avrdude -p m1280 -B 1 -P usb -c avrispmkII -U flash:w:master+slave.hex

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IMHO ist das Aneinanderhängen per cat und das Patchen unsauber und 
funktioniert nur so lange, wie der Mastercode nicht in den Adressbereich 
des Slavecodes reicht. Nach Murphy ist der Mastercode mal zu gross und 
es knallt...

Sicher wäre es, wenn du den Slavecode z.B. als const uint8_t Feld[] in 
das ROM des Masters schreibst und daraus auch die Daten fürs Flashen des 
Slaves liest.

Wenn du dieses const Feld in eine einzelne Objektdatei nimmst, kann die 
auch statisch/extern bleiben und vom Linker zum jeweils geänderten 
Quellcode des Masters "am Stück" eingebunden werden.

Noch weiter kannst du gehen, indem du diesem Objektcode eine eigene 
Sektion zuweist. Hier kann nich aber nur den Hinweis geben, dass es 
gehen müsste (Doku zu attribute section und Linker control scripts 
lesen). Praktische Erfahrung habe ich da keine.

Das const uint8_t Feld[] könntest du mit einem einfachen zur Not 
schneller-geschrieben-als-gegooglet "bin-to-char Konverter" machen 
lassen, ähnlich wie die Leute Bitmaps oder Fonts in ihren Sourcecode 
einbinden. In der Codesammlung könnte hierzu was sein.

Die Technik um Daten im ROM unterzubringen und auszulesen ist im 
AVR-GCC-Tutorial unter dem Stichwort PROGMEM zu finden.

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es um das "aneinanderhängen" von Dateien geht, könnte
"copy quelldatei1,quelldatei2 zieldatei" helfen.
mfG Ingo

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.