www.mikrocontroller.net

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


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist das Linkerscript ?

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Wo ist das Linkerscript ?

Ja, gute Frage!
Zeig mal.

Gruss
Bernd

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.