Forum: Mikrocontroller und Digitale Elektronik Unterprogramme


von David R. (traktor33)


Lesenswert?

Hallo Forum,
ich habe in C 4 Unterprogramme geschrieben die vom Hauptprogramm 
nacheinander abgearbeitet werden sollen.

Ich weiß nicht wie ich die Unterprogramme im Hauptprogramm aufrufen soll 
damit sie nacheinander abgearbeitet werden, also erst wenn das erste 
Unterprogramm erledigt ist darf das zweite Unterporgramm abgearbeitet 
werden bzw. aufgerufen werden.

Ich hoffe ihr könnt mir helfen!

MfG tracktor33


// Hauptprogramm

void loop()
{
Unterprogramm 1

Unterprogramm 2

Unterporgramm n
}

// Unterprogramme

void Unterprogramm 1()

von nix tun! (Gast)


Lesenswert?

>die vom Hauptprogramm
>nacheinander abgearbeitet werden sollen.

Das passiert automatisch. Da must Du gar nix tun.

von Falk B. (falk)


Lesenswert?

Siehe Multitasking und jedes Grundlagenbuch zur Programmierung, egal 
welche Sprache.

von Dennis S. (eltio)


Lesenswert?

Falk Brunner schrieb:
> Siehe Multitasking und jedes Grundlagenbuch zur Programmierung, egal
> welche Sprache.

Oder besser gesagt "vergiss Multitasking".. ;-)

von David R. (traktor33)


Lesenswert?

Ok danke schonmal dafür und  könnt ihr mir noch sagen welche Befehle ich 
in einem Unterprogramm einflechten muss damit der µC erst mit dem 
zweiten Unterprogramm weitermacht bist das erste erfüllt ist.
Sprich das Unterprogramm enthält eine if else Kombination und das 
Unterprogramm soll erst abgeschlossen sein, wenn die if Anweisung 
erfüllt ist?

von Karl H. (kbuchegg)


Lesenswert?

David Rohwerder schrieb:
> Ok danke schonmal dafür und  könnt ihr mir noch sagen welche Befehle ich
> in einem Unterprogramm einflechten muss damit der µC erst mit dem
> zweiten Unterprogramm weitermacht bist das erste erfüllt ist.

Ähm gar keine.

Dein Programm wird Anweisung für Anweisung ausgeführt. Von oben nach 
unten. Eine Anweisung nach der anderen.
Wird ein Unterprogramm aufgerufen, dann wird dort Anweisung für 
Anweisung ausgeführt, von oben nach unten. Ist das Unterprogramm zu 
Ende, dann erfolgt der Rücksprung zur aufrufenden Stelle und dann geht 
es dort mit der nächsten Anweisung weiter. Anweisung für Anweisung. Von 
oben nach unten.


Einzige Ausnahme sind Schleifen, die tatsächlich eine Wiederholung eines 
Code-Teiles bewirken, bzw. Abfragen die eine Auswahl aus einem von 2 
möglichen Codepfaden bewirken.


> Sprich das Unterprogramm enthält eine if else Kombination und das
> Unterprogramm soll erst abgeschlossen sein, wenn die if Anweisung
> erfüllt ist?

Wenn du die Formulierung
"wenn .. erfüllt"
benutzt, dann ist das ein deutlicher Hinweis auf eine 
Schleifenkonstruktion.

1
   while( Bedingung )      // solange die Bedingung erfüllt ist
2
   {
3
      mache was
4
   }

wäre zb so eine Schleifenkonstruktion.

Hat denn da dein C-Buch gar nichts dazu zu sagen?

von Hmm (Gast)


Lesenswert?

Die Unterprogramme werden, auch ohne das Du das in irgendeiner Weise 
sicherstellen musst, in der Reihenfolge und erst nach Beendigung des 
vorgehenden, abgearbeitet.

Die genauere Syntax ist:
1
void loop()
2
{
3
   Unterprogramm_1();
4
5
   Unterprogramm_2();
6
7
   Unterprogramm_n();
8
}

Vielleicht können wir da noch Missverständnisse ausräumen, falls Du uns 
erklärst, was Dich auf den Gedanken gebracht hat, das Du dafür besondere 
Maßnahmen treffen musst.

von Hmm (Gast)


Lesenswert?

Einer war zu langsam oder ein Anderer zu schnell.
Na. Ich muss ohnehin noch Bauteile einsortieren.

von andy (Gast)


Lesenswert?

Hallo,von deinem ersten post bis zu deinem letzten sind gut 16 Stunden 
vergangen.Wenn du ca. 30 Minuten auf einer Seite die sich mit C 
beschäftigt gelesen hättest,wäre deine Frage beantwortet.
Das was du wissen willst ist wirklich so banal.Jeder hat mal angefangen.
Aber du solltest erstmal lesen,probieren,nachdenken und nochmal 
probieren
und nicht bei so simplen Sachen sofort einen Thread aufmachen.

gruss

andy

von David R. (traktor33)


Lesenswert?

Mein Buch gibt nicht viel her zwecks Unterprogramme.

Hier mal ein Beispiel von mir:

//Unterprgramm 1

void Stellung_Wippe_in_Wischen()
{

  if(value==LOW)
  {
    digitalWrite(Wippe_M4, LOW);
  }
  else
  {
    digitalWrite(Wippe_M4, HIGH);
  }

 value=digitalRead(Endlage_Wippe_Wischen);

}


Ich möchte wenn: value==LOW ist das das Unterprogramm erst dann beendet 
wird und dann zurück zum Hauptprogramm gesprungen wird wo weitere 
Unterprogramme warten.

von Karl H. (kbuchegg)


Lesenswert?

David Rohwerder schrieb:
> Mein Buch gibt nicht viel her zwecks Unterprogramme.

Dein Problem sind nicht Unterprogramme sondern Kontrollstrukturen!


> Hier mal ein Beispiel von mir:
>
> //Unterprgramm 1
>
> void Stellung_Wippe_in_Wischen()
> {
>
>   if(value==LOW)
>   {
>     digitalWrite(Wippe_M4, LOW);
>   }
>   else
>   {
>     digitalWrite(Wippe_M4, HIGH);
>   }
>
>  value=digitalRead(Endlage_Wippe_Wischen);
>
> }
>
>
> Ich möchte wenn: value==LOW ist das das Unterprogramm erst dann beendet
> wird

Nein, das möchtest du nicht.
Du möchtest irgendetwas wiederholen, solange value gleich LOW ist.

wiederholen   --->  Schleifenkonstrukt


Und schmeiss dein "C-Buch" auf den Mist, wenn es dazu auch nichts zu 
sagen hat. Denn dann ist es kein C-Buch sondern was weiß ich was. 
Vielleicht ein Kochbuch.

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn du die Formulierung
> "wenn .. erfüllt"
> benutzt, dann ist das ein deutlicher Hinweis auf eine
> Schleifenkonstruktion.
>
>    while( Bedingung )      // solange die Bedingung erfüllt ist
>    {
>       mache was
>    }
>
> wäre zb so eine Schleifenkonstruktion.

Wenn du die Antworten auch lesen würdest, hättest du die Antwort...

wie wäre es also mit
1
while (value != LOW) {}

dann wartet er hier bis die Bedingung false wird und geht dann erst 
weiter...

von David R. (traktor33)


Lesenswert?

ok, trotzdem erstmal danke

von Hmm (Gast)


Lesenswert?

>Mein Buch gibt nicht viel her zwecks Unterprogramme.

Dann such Dir einen wackelnden Tisch dafür. :-)
Ich empfehle den Kernighan&Ritchie. Zweite Auflage.

>Ich möchte wenn: value==LOW ist das das Unterprogramm erst dann beendet
>wird und dann zurück zum Hauptprogramm gesprungen wird wo weitere
>Unterprogramme warten.

Gut. Dazu fehlt noch die Überlegung bwzw. Beschreibung was denn 
geschehen soll, wenn und solange value != LOW ist.

Warum liest Du value nicht vor der Bedingung ein? Geschieht das schon 
irgendwo vorher? Und wenn ja, warum?

Ich möchte Dir sehr empfehlen den Ablauf ersteinmal in natürlicher 
Sprache zu formulieren und Dich dabei streng um Korrektheit zu bemühen. 
Das wird Dir bei der Formulierung der Programme helfen, da Korrektheit 
dort wesentlich ist.

von Karl H. (kbuchegg)


Lesenswert?

Hmm schrieb:

> Ich möchte Dir sehr empfehlen den Ablauf ersteinmal in natürlicher
> Sprache zu formulieren und Dich dabei streng um Korrektheit zu bemühen.
> Das wird Dir bei der Formulierung der Programme helfen, da Korrektheit
> dort wesentlich ist.

Exakt.
Und zu diesem Behufe sind nicht irgendwelche 'ich möchte' Formulierungen 
hilfreich, sondern ausschliesslich die Wörter bzw Wortkombinationen

  wenn  ....    dann
    dieses hier
  andernfalls
    das hier


  wiederhole solange wie gilt ( .... )
     dieses hier


  wiederhole
     dieses hier
  solange wie gilt( .... )


  wiederhole, wobei eine Variable erst mal einen Wert bekommt,
              vor jeder Wiederholung geprüft wird ob( .... )
              und nach jedem Durchlauf ausgeführt wird, dass ....
    dieses hier


das sind deine Kontrollstrukturen.
Und mit diesen bzw. durch ineinanderschachteln dieser Kontrollstrukturen 
kann man alles ausdrücken, wie man den Programmfluss steuern will. Was 
anderes ist erst mal nicht zulässig.

von ich (Gast)


Lesenswert?

Evtl. Hilft das Stichwort: Programmablaufplan,

um die Ideen und Gedanken in eine strukturierte Form zu bekommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.