Forum: Mikrocontroller und Digitale Elektronik Assembler: Bootloader Rückmeldung über App-Start


von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Ich habe auf meinem Tiva (Cortex-M4) einen Bootloader laufen, welcher in 
Assembler geschrieben ist. Dafür habe ich ein vorhandenes, 
mitgeliefertes Beispiel von TI angepasst, was auch soweit tut wie es 
soll.

Meine Frage dazu: irgendwann kommt der Branch zum Einsprungpunkt des 
Hauptprogrammes:
1
    movw    r0, #(APP_START_ADDRESS & 0xffff)
2
    ldr     sp, [r0]
3
4
    ldr     r0, [r0, #4]
5
    bx      r0

Gibt es eine Möglichkeit hier eine Rückmeldung zu bekommen ob die 
Applikation erfolgreich gestartet wurde?

von dunno.. (Gast)


Lesenswert?

nur, wenn die applikation sich nach der initialisierung meldet?

der bootloader läuft ja dann nicht mehr..

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

dunno.. schrieb:
> nur, wenn die applikation sich nach der initialisierung meldet?
>
> der bootloader läuft ja dann nicht mehr...

Genau das ist mein Anliegen: wenn die Applikation fehlerhaft / der 
Einsprungpunkt nicht an dieser Speicheraddresse ist / keine Applikation 
vorhanden ist, wie bekomme ich das mit?

von Alex W. (a20q90)


Lesenswert?

Du kannst doch sicher einen Watchdog programmieren, wenn die App sich 
nicht innerhalb x meldet, macht das Ding einen Bootloader-Reset (sprich 
er spring auf den Bootloader-Resetvector)

von dunno.. (Gast)


Lesenswert?

Watchdog ist ein sehr guter punkt um sicherzustellen, dass die 
applikation anläuft. allerdings muss man sich dann natürlich überlegen 
was man macht, wenn man per watchdog-reset im bootloader wieder 
aufwacht...

um festzustellen ob eine applikation da ist: Fingerprint auf bestimmte 
flash-adressen im applikationsbereich legen wäre eine möglichkeit. Die 
applikation wird dann nur gestartet, wenn der fingerprint da ist.

der einsprungspunkt sollte besser da sein. auch hier helfen fingerprints 
in passenden applikationen, dadurch kann schon beim flashen verhindert 
werden, dass eine unpassende applikation geschrieben wird.

wenn die applikation fehlerhaft übertragen wurde: vom bootloader den 
applikationsbereich löschen lassen.

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Die Idee mit dem Fingerprint in Verbindung mit dem Bootloader gefällt 
mir. Im Falle einer fehlerhaften Übertragung könnte ich den 
Speicherbereich löschen, allerdings bringt mich das dann auch nicht 
weiter.

Danke für den Input.

von Adam P. (adamap)


Lesenswert?

J. F. schrieb:
> Gibt es eine Möglichkeit hier eine Rückmeldung zu bekommen ob die
> Applikation erfolgreich gestartet wurde?

Wie stellst du dir das vor?

Im Bootloader startest du deine "App.-Main" die theoretisch nie 
verlassen wird, somit (selbst wenn du im Bootloader mehr Code hättest) 
würde der nie aufgerufen werden.

Um zu prüfen ob eine App. vorhanden ist, musst du über ein "Fingerprint" 
gehenm, wie 'dunno' sagte.

Falls bei mir das flashen fehlschlägt, lösche ich die ersten Bytes 
wieder und prüfe da immer ob eine Firmware vorhanden ist.

Was bringt dich an dieser Idee nicht weiter?

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Adam P. schrieb:
> Was bringt dich an dieser Idee nicht weiter?

Mir war diese Idee einfach nicht vollständig klar - so einfach sie auch 
ist. Sehe die Vorgehensweise aber als einen praktikablen Weg an.

Ich nehme als "Fingerprint" nun einen Hash den ich vorher über die 
Applikation berechne und an diese anhänge. So habe ich auch Gewissheit 
das die richtige Applikation (und auch nur diese) geladen wird.

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.