Forum: Mikrocontroller und Digitale Elektronik Keil ; ARM; LPC; PC Program Counter setzen


von Christoph F. (christoph1973)


Lesenswert?

Hallo zusammen,
ich möchte von einem Bootloader aus, mein Programm an einer definierten 
Hardwareadresse weiterlaufen lassen.
Das Applikationsprogramm ist auf eine feste Adresse verlinkt (0x2000).
Welches ist die sauberste Möglichkeit eine solche Aktion durchzuführen 
(und wie funktioniert sie?)

Mit void Funktionszeiger und dem Assembler mov Befehl habe ich bereits 
"rumgespielt" habe aber den gewünschten Effekt nicht hinbekommen.

Gibt es vielleicht einen GOTO Befehl?

Bin um jeden Tip dankbar

Grüße
Christoph

von (prx) A. K. (prx)


Lesenswert?

Was hast du denn alles schon probiert?

Ist eines der beiden beteiligten Programme als Thumb-Code geschrieben?

von Christoph F. (christoph1973)


Lesenswert?

Hallo,
es handelt sich momentan um eine einzige Projektdatei (komplett in C).
Ich habe lediglich zwei Funtionsteile voneinander gekapselt (der spätere 
Bootloader liegt in den ersten beiden Sektoren 0x0000 - 0x2000 und die 
Applikationssoftware liegt ab Adresse 0x2000).
Ich will die Programme erst später auftrennen, aber auch dann muss ich 
vom Flashbooter auf eine definierte Adresse (in meinem Fall 0x2000) 
springen.

Zu deiner Frage zwecks Thumb Code betreffend muss ich leider sagen dass 
ich mich damit überhaupt noch keine Erfahrung habe ;-( (werde es aber 
gleichmal googeln)

Wie gesagt eigentlich will ich lediglich dem µC sagen dass er von nun an 
an einer bestimmten Adresse "weitermachen" soll.

Gruß
Christoph

von (prx) A. K. (prx)


Lesenswert?

Naheliegend:
  typedef void (*fcn_ptr)(void);
  fcn_ptr application = (fcn_ptr)0x2000;
  application();

von Christoph F. (christoph1973)


Lesenswert?

Hallo,
super, vielen vielen Dank
so funktioniert es.

Viele Grüße
Christoph


Ps. Da muss ich irgendein anderer Fehler gemacht haben, zumindest dachte 
ich dass ich es genau so schon probiert habe (In der Applilkation Note 
AN10256 von NXP wird es nämlich auch so vorgeschlagen.)

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.