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()
>die vom Hauptprogramm >nacheinander abgearbeitet werden sollen. Das passiert automatisch. Da must Du gar nix tun.
Falk Brunner schrieb: > Siehe Multitasking und jedes Grundlagenbuch zur Programmierung, egal > welche Sprache. Oder besser gesagt "vergiss Multitasking".. ;-)
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?
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?
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.
Einer war zu langsam oder ein Anderer zu schnell. Na. Ich muss ohnehin noch Bauteile einsortieren.
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
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.
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.
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...
>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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.