Forum: Compiler & IDEs Funktion aus.S in.bootloader section packen - wie?


von André (Gast)


Lesenswert?

Hallo allerseits,

ich habe ein kleines Problem dabei, ein bestehendes Projekt (komplett in 
C geschrieben) um einen in Assembler geschriebenen Bootloader zu 
erweitern. Am Ende soll also ein hexfile herauskommen, das sowohl den 
Bootloader als auch eine erste Version der Betriebssoftware enthaelt.
Ich habe es nach langem umherprobieren nun endlich hinbekommen, eine 
C-Funktion in die Bootloader-section an 0x0c00 zu verschieben - 
funktioniert soweit. Dies bringt mir jedoch noch dann etwas, wenn ich 
aus dieser C-Funktion heraus eine ASM-Funktion inline aufrufen kann 
(sonst liegt diese Funktion ja unter Umstaenden nicht im 
Bootloaderbereich des Flashs). Leider scheitert es daran, denn die 
Funktion wird immer ueber ein Rcall aufgerufen und liegt sonstwo.

Praktisch waere es nun, wenn ich die ganze Geschichte mit der die 
ASM-Funktion aufrufenden C-Funktionbleiben lassen und dem GCC 
stattdessen mitteilen koennte, dass er die nackte ASM-Funktion direkt an 
die Startadresse des Bootloaders im Flash schreiben soll. An diesem 
Punkt bin ich dann jedoch leider gescheitert, da ich "__attribute__ 
((naked, section (".bootloader")));" nicht in die .S einbauen kann. Die 
.S schaut bisher so aus (dient vorerst nur dazu, den ganzen Compilerkram 
ueberhaupt ans Laufen zu bekommen):

.global asmbl
.func asmbl
asmbl:
  nop
  nop
  nop
.endfunc

Hat fuer dieses Problem irgendwer eine Loesung parat?

Vielen Dank und beste Gruesse,
André

von Jörg X. (Gast)


Lesenswert?

Getrennt erstellen, und erst die .hex-Files "zusammen-bauen", d.h. von 
einem den "end-record"(letzte Zeile) entfernen und das andere 
dranhängen.
Das ist die bei weitem einfachste Lösung, das Thema gab's hier schon 
öfters...

hth. Jörg

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.