File in µC Code einbinden

OP #4317843
Hallo!

Ich möchte den Inhalt eines hex-Files in meinen C code so einbinden, 
dass ich auf das File innerhalb eines µC zugreifen kann. Der Zugriff 
braucht dabei nicht dynamisch ablaufen. Sprich: Der Inhalt des hex-Files 
steht schon zur Compilezeit fest.
Als IDE verwende ich IAR, falls das eine Rolle spielen sollte.


Hat da jemand einen Hinweis, wie das funktioniert?


VG

Ulf
Gast #4317848
Matthias S. schrieb:
> Schade, das du nicht schreibst, um was für einen MC es geht. Bei einem
> AVR deklariere ich ein Array als

dann muss man die Datei aber immer noch umwandeln.

sinnvoller ist es aus der Datei ein Objekt file zu machen und es dann 
einfach mit zu linken.

Aber wie das bei IAR - keine Ahnung.
(Firma: matzetronics) #4317862
Peter II schrieb:
> dann muss man die Datei aber immer noch umwandeln.

Das sollte mit einem Konverter nicht so schwierig sein. Hex2Bin ist 
Standard und dann kann man sich z.B. sowas hier zusammenkloppen oder 
einen Online Konverter suchen:
http://lua-users.org/wiki/BinToCee

Wenn das nur ein paar Bytes sind, auch händisch - wir wissen ja nicht 
mal, wie lang das Hex File ist...
Gast #4317871
Matthias S. schrieb:
> Das sollte mit einem Konverter nicht so schwierig sein. Hex2Bin ist
> Standard und dann kann man sich z.B. sowas hier zusammenkloppen oder
> einen Online Konverter suchen:
> http://lua-users.org/wiki/BinToCee
>
> Wenn das nur ein paar Bytes sind, auch händisch - wir wissen ja nicht
> mal, wie lang das Hex File ist...

naja, andere Passen sich einfach ihr Makefile an, damit alle *.bin 
Dateien mit gelinkt werden und brauchen dann nichts mehr von Hand zu 
machen.
Gast #4317898
Das Konvertierungsprogramm kann man sehr gut mit Java-Script schreiben 
und im Browser laufen lassen. Per Copy & Paste kann man die Ausgabe des 
Browsers dann in das Zielprogramm übertragen.
Moderator Persönliche Seite #4317944
Klaus W. schrieb:
> Noch fertiger im Anhang...

:-)

Wenn ich richtig gelesen habe, hat der TO eine Hex-Datei und keine 
Bin-Datei. Dafür ist bin2c.cpp ungeeignet.

pipapo schrieb:
> unter Linux gibt es xxd

Wenn es sich um eine Hex-Datei im Intel-Hex-Format - wovon ich stark 
ausgehe - handelt, ist xxd ebenso ungeeignet.

Man muss die Datei schon interpretieren: Links eine Datensatzmarkierung, 
danach eine Längeninformation und der Offset, dann der Datentyp des 
Records, dann die Daten selbst und rechts eine CRC, die in den Nutzdaten 
nichts zu suchen hat.

Ich habe mal so ein C-Programm (f. Linux und Windows) geschrieben, 
welches ich für diverse Bootloader verwende. Wenn Ulf daran interessiert 
ist, kann er sich ja melden. Oder es selbst machen - so schwierig ist 
das nicht.

Das Format ist hier erklärt:

   https://de.wikipedia.org/wiki/Intel_HEX
Moderator Persönliche Seite #4317985
Ulf Brandner schrieb:

> Die Hex Datei enthält den Code, den ich von µC1 über SPI zum Bootloader
> von µC2 schicken möchte.

Dann gehts auf jeden Fall nicht mit dem Zusammenkopieren. Da sind 
Adressüberschneidungen (Code µC1 <--> Code µC2) auf jeden Fall gegeben.

Also entweder:

  - erst oben genanntes hex2bin
  - dann oben gezeigtes bin2c

verwenden oder das Programm selber schreiben.
#4318030
Frank M. schrieb:
> Dann gehts auf jeden Fall nicht mit dem Zusammenkopieren. Da sind
> Adressüberschneidungen (Code µC1 <--> Code µC2) auf jeden Fall gegeben.

Beim AVR sind jedenfalls Bootloader und Applikation in getrennten 
Flashbereichen, d.h. es überschneidet sich nichts.

Warum sollen sich beim ARM beide überschneiden, bzw. wie soll das 
überhaupt gehen, wenn Applikation und Bootloader sich gegenseitig 
überschreiben?
Moderator Persönliche Seite #4318037
Peter D. schrieb:
> Warum sollen sich beim ARM beide überschneiden, bzw. wie soll das
> überhaupt gehen, wenn Applikation und Bootloader sich gegenseitig
> überschreiben?

Weil Du es nicht verstanden hast:

µC1 soll µC2 flashen. In µC2 ist also ein Bootloader, ok.

Aber in µC1 steckt schon eine Applikation, nämlich die Senderoutine, um 
die zu flashenden Daten von µC1 nach µC2 zu schicken. Daher ist es mit 
hoher Wahrscheinlichkeit nicht möglich, die Applikation für µC2 in µC1 
1:1 zu speichern. Die Daten müssen in µC1 versetzt abgelegt werden.
1
    µC1                       µC2
2
----------------        ----------------
3
| Senderoutine |   +--> | Data f. µC2  |
4
|              |   |    |              |
5
| Data f. µC2  |---+    |              |
6
|              |        |              |
7
|              |        | Bootloader   |
8
----------------        ----------------

Wenn Du also die beiden Hex-Dateien (µC1 Programm 1 + Data für µC2 = 
Programm 2) zusammenkopierst, hast Du eine Überschneidung.
#4318440
Igori schrieb:
> Das Konvertierungsprogramm kann man sehr gut mit Java-Script schreiben
> und im Browser laufen lassen. Per Copy & Paste kann man die Ausgabe des
> Browsers dann in das Zielprogramm übertragen.

Keine gute Idee.
Denn sinnvollerweise wird man den Konvertierschritt mit ins makefile 
einbauen.
#4318444
Frank M. schrieb:

> hoher Wahrscheinlichkeit nicht möglich, die Applikation für µC2 in µC1
> 1:1 zu speichern.


Versteh ich nicht. Warum soll das nicht gehen.
Die Applikation für µC2 ist aus Sicht des µC einfach nur ein Array aus 
Bytes, welches er 1:1 an den Bootloader in µC2 weitergibt. µC1 soll 
dieses Programm ja gar nicht ausführen.

>
1
>     µC1                       µC2
2
> ----------------        ----------------
3
> | Senderoutine |   +--> | Data f. µC2  |
4
> |              |   |    |              |
5
> | Data f. µC2  |---+    |              |
6
> |              |        |              |
7
> |              |        | Bootloader   |
8
> ----------------        ----------------
9
>
Gast #4318775
Igori schrieb:

> Das Konvertierungsprogramm kann man sehr gut mit Java-Script schreiben
> und im Browser laufen lassen. Per Copy & Paste kann man die Ausgabe des
> Browsers dann in das Zielprogramm übertragen.

Sarkasmus pur. Danke.

Man könnte es natürlich noch weiter treiben, so weit, dass selbst die 
Dümmsten merken, dass hier etwas völlig ausser Kontrolle geraten ist...

Oder meintest du das etwa gar im Ernst?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.