C Funktionen mit Linker an spezielle Stelle (zB Bootloader)

Gast #690404
Hallo,

hab hier im Forum etwas herumgesucht, aber bin noch nicht so ganz fündig 
geworden.

Möchte die Applikation und Bootloader im Projekt zusammenfassen.
Also hätte folgendes vor:

a) Eine Funktion (einzelne oder mehrere C-Funktionen für Bootloader) 
soll so weit wie möglich am Ende des Flash platziert werden. Der 
Bootloader braucht keine Interrupts, macht also alles mit Polling.  --> 
Wahrscheinlich durch Declaration einen neuen Section im Source und 
Angabe im Linker?
b) Der Resetvektor soll fix auf diese Funktion 'a)' hüpfen --> mit 
declaration eines Pointers auf diese Funktion?
c) Der eigentliche Code (.text) kann dann den Rest im Flash ausfüllen, 
wobei die Startroutine immer an fixer Stelle sein muß (dort soll ja der 
Bootloader dann nach vollendeter Tat landen)
Gast #690430
Hi, Günther,

Ja, wenn ich Dich richtig verstehe, dann möchtest Du ein Programm 
entwerfen, mit main() in der Application Flash Section und 
Bootloader-Funktion (also ohne eigenes main() in der Boot Flash Section.

Für unmöglich halte ich das nicht. Mein nächster Ansatz, dies weiter zu 
denken, wäre das Betrachten der Sections, die der Compiler einrichten 
kann.

Als geborener Projektmanager denke ich aber zeitlich ungekehrt - ich 
denke erst den letzen Schritt und dann den zweitletzten, drittletzten.

Und fürchte ich mich vor dem Debuggen. Mit Atmel Studio habe ich das 
Debuggung in der Bootloadflasch-Section nie in die Gänge gebracht.

Ich denke erst weiter, wenn Studio mehr als eine
Section beherrscht.


Ciao
Wolfgang Horn
#690546
Man kann doch den Bootloader zunächst mal als ganz normales Programm im 
Application-Bereich entwickeln und debuggen. Erst wenn alles fertig ist, 
plaziert man ihn in den Bootloader-Bereich, und dann ist auch seine 
main() dort, denn da gehört sie m.E. auch hin.
Gast #690755
Hallo,
gleich mal danke für die Posts.

Ich möchte gar keine Bootloadersection verwenden, also vollen Zugriff 
auf den kompletten Flash in den Config Registern zulassen. Der 
Bootloader (also die Funktion) selbst muß aufpassen, daß er sich nicht 
wegflashed.

Das Debuggen sollte dann auch funktioneren, ist ja alles ein Programm.

Habe so einen Bootloader auch schon auf einer Menge PICs mit HiTech und 
Assembler gemischt erstellt, daß funzt prima.

Wahrscheinlich kann man mit attrib o.ä. einer Funktion eine neue 
Section zuweisen und diese dann beim Linken an eine spezielle Stelle 
platzieren lassen.

Dann müßte man die .start section im Reset Vektor umdrehen und diese auf 
den Bootloader zeigen lassen. Der Bootloader muß dann wieder zurück in 
die .start section hüpfen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.