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

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.