Forum: Compiler & IDEs Externe Datei mit Daten als DSEG einbinden


von Finn S. (scooter757)


Lesenswert?

Hallo!

Ich zweckentfremde einen AtMega 16 als ROM in der Testphase eines 
Projektes, da ich kein (EP)ROM Schreibgerät besitze, bzw. ich den Mega 
bei kleinen Änderungen schnell neu programmieren kann. Dabei wird ein 
Port für die Adresse verwendet und es soll auf den anderen 3 Ports Daten 
ausgegeben werden. Für schnellen Speicherzugriff sollen die Daten in 
4Bit Blöcken im Speicher liegen (Basisadresse + PIN mit doppeltem 
Linksshift). Das programmieren via Assembler stellt kein Problem dar.

Mein Anliegen: Diese Daten erzeugt ein eigener Parser, das aus 
menschenlesbaren Zeilen die 3 Byte pro Adresse erzeugt. Das 
Ausgabeformat kann ich somit selbst bestimmen (und auf 4 Byte auffüllen) 
und implementieren. Z.B. werden schon Logisim kompatible Dateien 
erstellt). Gibt es nun einen guten Weg die erzeugte Datei in das 
Datensegment des AVR-Projektes einzubinden?

Die Größe werden immer 256 x 4 Byte = 1024 Byte, die einfach an einer 
definierten Stelle (z.B. 0x100) mit in die vom Assembler erzeugte HEX 
Datei geschrieben werden, oder als .DSEG in das Projekt mit eingebunden 
werden soll.

So weit ich weiß, wird asm Code ja ohne Linker direkt übersetzt (stimmt 
das?)

Viele Grüße, Finn

von Dr. Sommer (Gast)


Lesenswert?

Finn S. schrieb:
> So weit ich weiß, wird asm Code ja ohne Linker direkt übersetzt (stimmt
> das?)
Nein, auch da müssen einzelne Dateien zusammengeführt werden.
Und warum willst du die in den RAM packen? Im Flash reicht doch, und der 
ist größer.

Du kannst z.B. objcopy nutzen, um deine binäre Datei in eine .o Datei zu 
überführen, die du dann mit linken kannst.

von Rolf M. (rmagnus)


Lesenswert?

Dr. Sommer schrieb:
> Finn S. schrieb:
>> So weit ich weiß, wird asm Code ja ohne Linker direkt übersetzt (stimmt
>> das?)
> Nein, auch da müssen einzelne Dateien zusammengeführt werden.

Das hängt vom Assembler ab. Es gibt auch welche, die direkt ein 
flashbares Binary erzeugen.

> Und warum willst du die in den RAM packen?

Wo steht denn, dass sie im RAM landen sollen?

von Finn S. (scooter757)


Lesenswert?

Rolf M. schrieb:
> Dr. Sommer schrieb:
>> Finn S. schrieb:
>>> So weit ich weiß, wird asm Code ja ohne Linker direkt übersetzt (stimmt
>>> das?)
>> Nein, auch da müssen einzelne Dateien zusammengeführt werden.

Hat jemand Erfahrung damit beim AtmelStudio 6?

>
> Das hängt vom Assembler ab. Es gibt auch welche, die direkt ein
> flashbares Binary erzeugen.
>
>> Und warum willst du die in den RAM packen?
>
> Wo steht denn, dass sie im RAM landen sollen?

Naja, erstmal in den Flash bekommen, also in die hex Datei die ich 
brennen kann. Ob ich dann alles in den RAM kopiere muss ich mal testen, 
wie schnell ich das brauche.

von Finn S. (scooter757)


Lesenswert?

So wie ich es in der Doku zum avr assembler compiler lese 
(http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_Command_Line_Options.html) 
wird direkt eine output Datei erzeugt, ohne linker.

Der Tipp mit dem objcopy ist gut, das werde ich mir mal ansehen!

Viele Grüße, Finn

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Finn S. schrieb:
> Mein Anliegen: Diese Daten erzeugt ein eigener Parser, das aus
> menschenlesbaren Zeilen die 3 Byte pro Adresse erzeugt. Das
> Ausgabeformat kann ich somit selbst bestimmen

Na dann erzeuge direkt Intel-Hex. Damit hast du alles unter eigener 
Kontrolle.

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.