Forum: Compiler & IDEs [ AVR-GCC] Funktionen an eine bestimmte Stelle im Speicher


von Max (Gast)


Lesenswert?

Ich Post das mal unter gcc, da das glaube ich nicht unbedingt 
avr-spezifisch ist:
Ich hab jetzt z.B. zwei Funktionen eine Funktion soll ganz normal an den 
Anfang des Flashs ( zum ausführen als normale Routine, eine zweite soll 
ans Ende ( Bootloader ), wie schaff ich das mit einem Schlag  ( = als 
ein Projekt).

von Rolf M. (rmagnus)


Lesenswert?

Im Linkerskript eine neue Sektion definieren und deren Position 
innerhalb von .text vorgeben. Dann in C die Funktion mit 
__attribute__((section("deine_sektion"))) deklarieren.

von Max (Gast)


Lesenswert?

Wo ist das Linkerscript ?

von Bernd M. (bernd_m)


Lesenswert?

Max schrieb:
> Wo ist das Linkerscript ?

Ja, gute Frage!
Zeig mal.

Gruss
Bernd

von 900ss (900ss)


Lesenswert?

Max schrieb:
> Wo ist das Linkerscript ?

Die stehen unter:
xxxx\WinAVR\avr\lib\ldscripts\

Sofern ich mich jetzt nicht irre:
Welches Script verwendet wird, hängt vom verwendeten AVR ab.
Wenn man ihm keines angibt, nimmt er sein eingebautes Defaultscript bzw. 
beim AVR-GCC (AVR-LD) hängt dieses von der Option -mmcu ab.
Dem Linker kann auch über die Kommandozeile gesagt werden, welches 
Script er verwenden soll. Du müßtest dann eines anpassen und im dieses 
Script per Kommandozeile mitteilen.

Du kannst dem Linker aber auch über die Kommandozeile angeben, wo er 
eine bestimmte Section hinpacken soll. Dann brauchst du dir kein 
Linkerscript schreiben (anpassen).
Wenn ich mich richtig erinnere ist die Option für die Kommandozeile so:
-WL,--section-start=DeineSection=0x1E000

Das Manual für AVR-LD ist dein Freund.

von Hc Z. (mizch)


Lesenswert?

Max schrieb:
> Ich hab jetzt z.B. zwei Funktionen eine Funktion soll ganz normal an den
> Anfang des Flashs

Eine solche Trennung ist sinnvoll nur möglich, wenn Deine 
Bootloader-Funktion mit Sicherheit nichts aus der libc verwendet. Das 
ruft nach Dauer-Trouble, denn Du baust Dir damit eine Falle, die bei 
jeder Änderung bedacht sein will.

Denn sonst hast Du die Wahl, die Library ebenfalls ans Ende zu legen, 
aber für alle Programmteile (auch die des Hauptprogramms).  Das würde 
Dir den Bootloader aufblasen.  Oder aber der Bootloader springt in den 
Library-Teil des Hauptprogramms, was aus offensichtlichen Gründen 
ebenfalls Käse wäre.

Ich habe auch keine Idee, wo Du den C-Startup-Code wie unterbringen 
möchtest.

Wenn Du zwei unabhängige Programme hast:  Was spricht dagegen, sie 
unabhängig zu übersetzen?

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.