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


von Thomas (Gast)


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

von Stefan B. (stefan) Benutzerseite


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.

von Ingo (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.