Forum: Compiler & IDEs C Funktionen mit Linker an spezielle Stelle (zB Bootloader)


von Günther (Gast)


Lesenswert?

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)

von Wolfgang Horn (Gast)


Lesenswert?

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

von Günter R. (galileo14)


Lesenswert?

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.

von Günther (Gast)


Lesenswert?

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.

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.