Hallo,
ich würde gerne in meinem C Program bei einem Einsprung in eine
while-Schleife einen Teil gerne nur einmal machen. Was ist hiefür die
eleganteste Lösung?
Könnt ihr mir ein paar tipps geben wie ihr das macht? Mit einer Semaphor
bzw. einem Flag? Welchen Typ nehmt ihr? Bit-Variable?
Das was im else-Zweig steht, würde ich gerne immer nur einmal machen.
Hmm, okay, danke.
gbt_pushputton ist aber eine bitvariable welche ich im keypad-interrupt
toggle.
ich muss dann whrscheinlich eine neue bitwariable nehmen die ich extra
hierfür benutze?!
grüße
Robert schrieb:> ich würde gerne in meinem C Program bei einem Einsprung in eine> while-Schleife einen Teil gerne nur einmal machen. Was ist hiefür die> eleganteste Lösung?
Und wenn Du diesen einmaligen Teil einfach vor die while-Schleife
schreibst?
Oder habe ich da was falsch verstanden?
Also.... Diese triviale Aufgabe beinhaltet eine endliche Anzahl
Loesungen. Probier die doch einfach aus. Es ist sicher sehr lehrreich.
Natuerlich erst nach dem tagelangen, erfolglosen Absuchen des gesammten
Internetes.
Die erste Fragestellung ist somit, wie bin ich sicher, das gesammte
Internet abgesucht zu haben. Gurgel kann das zwar, aber erst auf die
richtige Frage.
Vor der while-Schleife mache ich das auch. Ich habe aber die Möglichkeit
in der while-Schleife die Regelung an- und wieder auszuschalten.
Ich weiß dass es eine Menge Lösungen gibt. Mich hatte nur interessiert
wie ihr das macht und wie ihr die variablen dann nennt um den Überblick
zu behalten wenn so etwas öffter vorkommt.
Grüße
Robert schrieb:> die Regelung an- und wieder auszuschalten.
Das ist aber eine ganz andere Anforderung wie "nur einmal"!
Wenn du dein Problem so flapsig beschreibst kriegst du halt unpassende
Antworten.
Wenn du etwas an oder ausschalten willst dann mach es über eine boolsche
Variable, falls es mehrere logisch verknüpfte Dinge sind dann denke über
einen Zustandsautomat nach.
Eine Zustandsmaschine oder Zustandsautomat, oder Statemachine, ist der
normale Ansatz fuer solche Konstrukte.
Der Main-Loop ist aussen rum. Iterationen(Loops) gibt es innen drin
keine, und gewartet wird nur genau an einem Ort, falls ueberhaupt.
Falls ueberhaupt, kann man dort spaeter einen Sleep() zum Stromsparen
einfuegen.
Der Programmfluss faellt durch, wird nirgendwo blockiert.
Robert schrieb:> ich würde gerne in meinem C Program bei einem Einsprung in eine> while-Schleife einen Teil gerne nur einmal machen. Was ist hiefür die> eleganteste Lösung?
Da man nicht "in eine Schleife springt", sondern eher bei der
Programmausführung die Schleife erreicht, ist es ganz einfach:
man zieht diesen Code aus der Schleife heraus und davor. Dann
wird er vor dem Erreichen der Schleife genau einmal ausgeführt.
Robert schrieb:> Vor der while-Schleife mache ich das auch. Ich habe aber die Möglichkeit> in der while-Schleife die Regelung an- und wieder auszuschalten.
Wenn du die Regelung innerhalb der Schleife (mehrfach) an- und
ausschalten können willst, dann mußt du auch den else-Teil
mehrfach durchlaufen. Allerdings ist dann deine Programmlogik
fehlerhaft. Du hast jetzt nur 1 Bit: Regelung an oder aus.
Was du anscheinend willst, ist beim Wechsel von "an" zu "aus"
einen bestimmten Codeabschnitt einmalig auszuführen. Dann gehört
der aber nicht einfach in einen else Zweig, sondern du solltest
ein separates if dafür verwenden:
1
while(...)
2
{
3
if(regelung_ist_an)
4
{
5
//zyklischer code für die Regelung
6
}
7
8
if(regelung_war_an&&!regelung_ist_an)
9
{
10
//einmaliger code zum Abschalten der Regelung
11
}
12
13
//den letzten Wert merken
14
regelung_war_an=regelung_ist_an;
15
}
Ach ja:
- deine Einrückung saugt
- deine Variablennamen saugen noch mehr