File in µC Code einbinden

OP #4317843
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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.
Moderator Persönliche Seite #4317944
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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.
#4318444
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

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.

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.