Mehrere programme in einem µC

Gast #540965
Lesenswert?
• ▲
▼
Hallo, ist es möglich mehrere Programme in einen µC zu laden.

Die Programme sollen dabei an festen Speicherpositionen untergebracht 
werden (Damit sie unabhängig von einander eingespielt werden können).
Dabei soll eine Art Bootmanager das auswählen des Programms erledigen.

Spricht irgendetwas dagegen?

Auch würde mich interessieren wie man in C zu einer bestimmten 
Speicheraddresse Springen kann.

void *jump() = 0x00;
jump();

Geht das?
#540970
Lesenswert?
• ▲
▼
@ tom

>Hallo, ist es möglich mehrere Programme in einen µC zu laden.

Warum nicht. Auch Main ist am Ende nur eine Funktion.

>Die Programme sollen dabei an festen Speicherpositionen untergebracht
>werden (Damit sie unabhängig von einander eingespielt werden können).

Das dürfte schon schwieriger werden.

>Auch würde mich interessieren wie man in C zu einer bestimmten
>Speicheraddresse Springen kann.

Mit absoluten Speicheradressen arbeitet man in C praktisch kaum.

http://www.mikrocontroller.net/articles/FAQ#Funktionszeiger

MFG
Falk
#540994
Lesenswert?
• ▲
▼
tom wrote:
> Dabei soll eine Art Bootmanager das auswählen des Programms erledigen.

Wie soll der aussehen?
Ne Tastatur, nen Jumper oder einen RS-xxx Input belauschen?

Wenn Dein Problem ist, dass Du die verschiedenen Programme separat 
voneinander aktualisieren willst, dann wird das etwas knifflig.

Wenn Du damit leben kannst, immer den kompletten aktuenn Firmwareset 
einzuspielen (und bei maximal 256k Flash ist das nicht wirklich eine 
Hürde, oder?), dann mach doch einfach ein main() als "Bootmanager" das 
dann schlciht abhängig vom Select-Imput die passenden Funktion aufruft.

Eine separate Aktualisierung wird knifflig, weil das Flash ja nicht 
partitioniert ist (bzw. eben nur in zwei Partitionen: Bootflash und 
Rest).

Bei Projekten, bei denen ich Code-Trennung brauche, z.B. weil die 
beteiligten Personen bestimmte Kenntnisse nicht haben dürfen, die der 
andere hat, kommen einfach 2 Controller rein und reden miteinander (SPI, 
TWI oder was auch immer).
Die ISP-Schnittstelle muxt man dann über einen Schalter und gut.
Die controller kosten mit eeenzatchzich das Stück ja auch kein Vermögen 
mehr :-)

hase
Gast #541002
Lesenswert?
• ▲
▼
tom wrote:
> Hallo, ist es möglich mehrere Programme in einen µC zu laden.
>
> Die Programme sollen dabei an festen Speicherpositionen untergebracht
> werden (Damit sie unabhängig von einander eingespielt werden können).
> Dabei soll eine Art Bootmanager das auswählen des Programms erledigen.
>
> Spricht irgendetwas dagegen?


Nein, es kommt auf den Controller an. Wenn das Flash in Pages unterteilt 
ist, wie z.B. beim M16C der Fall ist, dann können diese Bereiche 
unterschiedlich geflasht werden. Dies ist z.B. in der Automobilbranche 
der Fall, wo in Starter, Bootloader und Applikation unterschieden wird. 
Der Starter bleibt immer gleich, sodass bequem per CD Bootloader und App 
geschrieben werden können.
#541018
Lesenswert?
• ▲
▼
@ Hartmut Semken

>Eine separate Aktualisierung wird knifflig, weil das Flash ja nicht
>partitioniert ist (bzw. eben nur in zwei Partitionen: Bootflash und
>Rest).

???
Der Flash ist ausserdem in Pages a 256? Byte aufgeteilt. Die kann man 
separat brennen.
Knifflig ist eher dem Linker zu verklickern, dass die einzelnen Module 
an feste Adressen sollen. Machbar, aber erfordern ne Menge 
Insiderwissen.

MFG
Falk
Gast #541036
Lesenswert?
• ▲
▼
Einfache Funktionsaufrufe bringen mich nicht weiter, die Programme 
müssen wirklich unabhängig voneinander sein.

Der Bootmanager wird aller voraussicht per LCD gesteuert.

Das Programm an die richtige Stelle zu laden sollte weniger das Problem 
sein (Da wird sowieso eine Spezielle ProgrammiereSoftware her müssen), 
es geht mehr um die großen Speichersprünge.

Es wird  ein großer AVR zum Einsatz kommen (mindestens 128k, eher 256k 
Flash).

Wie könnte ich den da im Speicher rumspringen?
Gast #541685
Lesenswert?
• ▲
▼
Hallo!

Tom, wegen deiner Frage vorhin.
>Auch würde mich interessieren wie man in C zu einer bestimmten
>Speicheraddresse Springen kann.

Beim Codevision-AVR-Compiler ist es möglich ASM-Code einzubinden.
Deshalb kann man ein JUMP durchführen.
...
#asm("jmp 0")
...

Tschüss
Markus

Antwort schreiben

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.

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.