STM32: Initialisierung zwei Programme

Gast #1804140
Hallo,

Meine Programmstruktur sieht folgendermaßen aus:
1
int main(void)
2
{
3
   //init clocks, flash, timer, IRQs, USART etc. 
4
   Init();
5
  
6
   if(usereingabe == 1)
7
   {
8
      //-> start zweites programm aus dem flash
9
      jump-to-app2();
10
   }
11
   else
12
   {
13
     //do some other stuff 
14
   } 
15

16
   while(1);
17
}

Wenn die Applikation2 aufgerufen wird (jump-to-app2();), wird wiederum 
die Init() durchgeführt - Initialisierung der Clocks, Flash, Timer etc.;

Somit werden in diesem Fall z.B. die Timer 2x initialisiert - weil ich 
sie im zweiten Programm benötige genauso wie im ersten, wenn die 
else-Anweisung ausgeführt wird.

Kann das zu Schwierigkeiten führen, wenn praktisch dann 2x der Timer4 
vorhanden ist, aber mit verschiedenen Interrupt-Adressen? Bzw. wäre es 
besser im ersten Programm nur die Clocks und den Flash-Zugriff zu 
realisieren und Timer, UARTs etc. erst in der else-Anweisung zu 
initialisieren?

Als Prozessor setze ich einen STM32F103 ein.

Gruß
Johannes
Gast #1804146
>Wenn die Applikation2 aufgerufen wird (jump-to-app2();), wird wiederum
>die Init() durchgeführt - Initialisierung der Clocks, Flash, Timer etc.;

Wozu?

>Kann das zu Schwierigkeiten führen, wenn praktisch dann 2x der Timer4
>vorhanden ist, aber mit verschiedenen Interrupt-Adressen?

Autsch!
Gast #1804155
Johannes schrieb:
> Kann das zu Schwierigkeiten führen, wenn praktisch dann 2x der Timer4
> vorhanden ist, aber mit verschiedenen Interrupt-Adressen?

 ^^

durchlesen .. an einen µC denken  .. drüber nachdenken und 
schlussfolgern..

ergebnis =  ??
Gast #1804157
holger schrieb:
>>Wenn die Applikation2 aufgerufen wird (jump-to-app2();), wird wiederum
>
>>die Init() durchgeführt - Initialisierung der Clocks, Flash, Timer etc.;
>
>
>
> Wozu?

Naja es sind zwei separate Programme, die für sich einzeln autark sein 
sollen bzw. sind; deshalb besitzen sie auch beide die gleiche 
Initialisierungsroutine.

Allerdings dachte ich mir schon, dass man beim Bootloader (Applikation1) 
vielleicht zu Beginn nur die Clocks und den Flash-Zugriff initialisiert 
und die Timer nur in der else Routine erstellt...

Das sollte dann ja wohl keine Probleme mehr machen, oder?
(Firma: EleLa - www.elela.de) #1805447
So geht das:

App 1:
- Initialisierung
- Run
- Deinitialisierung  Deaktivierung Interrupts  Reset der 
HW-Komponenten
- Sprung App2
- Initialisierung aus App2

Aufpassen, wenn die Clocks geändert werden müssen (RCC/PLL...) Im 
Handbuch RM0008 steht geschrieben wie man vorgehen muss.
Gast #1805453
Markus Müller schrieb:
> - Deinitialisierung  Deaktivierung Interrupts  Reset der
>
> HW-Komponenten

die Clocks und der Flash-Zugriff sind in beiden Programmen identisch, so 
dass ich es zu Beginn des Programmstarts von Programm1 durchführe und 
danach nicht mehr.

Die Interrupts müssen ja auf eine andere Position gebracht werden (NVIC 
- vector table offset) - Startaddresse des neuen Programms; reicht dass 
oder müssen die auch wirklich noch deaktiviert werden zuvor?
(Firma: EleLa - www.elela.de) #1806467
Also ich würde, bevor ich in die neue App springe die alte App erst 
korrekt beenden, also die Interrupts deaktivieren. Denn die neue App 
initialisiert Speicherbereiche, die evt. durch einen falschen 
Interruptaufruf überschrieben werden.
Dann kommen so Fehler wie, bei mir gings immer, aber der Kunde hat 
urplözlich Probleme.

Nicht vergessen: Die Probleme kommen auch immer dann, wenn man selbst im 
urlaub ist und ein Kollege dreht Dir dann 5x den Hals um.

Also, mach es richtig oder gar nicht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.