Unterprogramme in einem Mikrocontroller

Gast #2394497
Lesenswert?

Hallo,

ich stehe noch sehr am Anfang mit der Programmierung von 
Mikrocontrollern. Und jetzt stellt sich mir die Frage wie ich bzw. ob 
ich Unterprogramme beenden kann/muss. Und zwar mein Programm sieht so 
aus das ich von Main aus auf ein anderes Programm zugreife/öffne von 
welchem es dann weitergeht. Also so in etwa:
1
void main(void);
2
{
3
erstens();
4
}
5

6

7
void erstens(void);
8
{
9
zweitens();
10
}
11

12
void zweitens(void);
13
{
14
n-tens();
15
}

Nun sind aber die anderen Programme noch geöffnet oder? Gibt es eine 
Möglichkeit diese zu schließen oder ist es generell besser darauf zu 
achten möglichst alles von main aus zu öffnen?
Persönliche Seite #2394503
Lesenswert?

Das sind keine Programme, sondern Funktionen, und sie sind nicht 
"geöffnet", und müssen daher auch nicht "geschlossen" werden.

Vor allem: Sie werden sequentiell abgearbeitet; ist also das von 
"zweitens" aufgerufene "n-tens" beendet (achtung: ungültiger Name!), 
dann kehrt "zweitens" zum Aufrufer "erstens" zurück und der wiederum zum 
seinem Aufrufer "main".
Gast #2394536
Lesenswert?

Anfänger schrieb:
> Nun sind aber die anderen Programme noch geöffnet oder? Gibt es eine
> Möglichkeit diese zu schließen oder ist es generell besser darauf zu
> achten möglichst alles von main aus zu öffnen?

Wenn du die Unterprogramme einfach sequenziell abarbeiten willst, dann 
schreibe z.B.:
1
void main(void);
2
{
3
erstens();
4
zweitens();
5
n-tens();
6
}

Ist aber nicht auf main beschränkt, das kannst du auch in 
Unterprogrammen so machen.

So wie du es geschachtelt hast (erstens ruft zweitens ruft n-tens) ist 
es nur sinnvoll, wenn zweitens nach der Abarbeitung von n-tens 
weiterarbeiten soll und nach der Abarbeitung von zweitens erstens noch 
weiterarbeiten soll.
Gast #2394572
Lesenswert?

Anfänger schrieb:
> Und jetzt stellt sich mir die Frage wie ich bzw. ob
> ich Unterprogramme beenden kann/muss.

Ja, mit dem Befehl return

Anfänger schrieb:
> oder ist es generell besser darauf zu
> achten möglichst alles von main aus zu öffnen?

Du kannst ohne Probleme in einer Funktion eine Funktion aufrufen, jedoch 
nicht ungebgegrenzt. Sprich, wenn du in einer Funktion eine Funktion 
aufrufst und in dieser wieder eine aufrufts und wieder eine und wieder 
eine usw. gibts irgendwann ein Stack Overflow

Noch was: Lass bitte noch das ; hinter den Funktionen weg, also:

void main(void) // hier kein Semikolon
{
  erstens();
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren