www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32: Initialisierung zwei Programme


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Meine Programmstruktur sieht folgendermaßen aus:
int main(void)
{
   //init clocks, flash, timer, IRQs, USART etc. 
   Init();
  
   if(usereingabe == 1)
   {
      //-> start zweites programm aus dem flash
      jump-to-app2();
   }
   else
   {
     //do some other stuff 
   } 

   while(1);
}


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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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!

Autor: block (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 =  ??

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.