fanatiXalpha
Fleet Admiral
- Registriert
- Aug. 2011
- Beiträge
- 13.558
Ich programmiere gerade einen µC der ein paar Motoren steuern soll usw.
Dabei müssen immer wieder die Pins eingelesen werden um z.B. einen Notaus zu detektieren oder andere Zustände.
Und wenn jetzt ein Notaus detektiert wurde, dann soll er an dem Punkt wo er gerade ist ausbrechen und in einen sicheren Zustand gehen. Gibt natürlich auch andere Situationen, wo er sich ähnlich zum Notaus verhalten soll.
Also wenn Pin X High dann gehe in den Zustand X.
Hoffe es ist verständlich
Das Abfragen der Pins habe ich natürlich in eine Funktion verpackt die ich halt immer wieder aufrufe(n muss, da nicht alle Pins per ISR abgefragt werden können).
Um aber aus der Schleife oder Funktion auszubrechen in der ich mich momentan befinde löse ich das bisher mit einer if-Abfrage für gesetzte Flags und einem entsprechenden return- oder break-Befehl.
Ist jetzt nicht wirklich viel Code der dann dahinter steckt, aber ist etwas nervig den jedes mal wieder an die nötigen Stellen zu kopieren.
Dachte ich könnte das auch in eine Funktion packen, da müsste ich dann ja nur anfangen zu tippen, er schlägt es mir vor, Enter und das wars dann.
Nur glaube ich nicht, dass das funktioniert...
break funktioniert ja nur wenn er sich unmittelbar in einer Schleife befindet und return springt aus der aktuellen Funktion raus.
Wenn ich also die Funktion zum Ausbrechen in einer anderen Funktion Y aufrufe, dann bleibe ich ja in Y oder?
Kennt ihr Möglichkeiten für mein Anliegen, oder muss ich dabei bleiben, das immer wieder einzutippen?
Der Code sieht schematisch aktuell ungefähr so aus:
Dabei müssen immer wieder die Pins eingelesen werden um z.B. einen Notaus zu detektieren oder andere Zustände.
Und wenn jetzt ein Notaus detektiert wurde, dann soll er an dem Punkt wo er gerade ist ausbrechen und in einen sicheren Zustand gehen. Gibt natürlich auch andere Situationen, wo er sich ähnlich zum Notaus verhalten soll.
Also wenn Pin X High dann gehe in den Zustand X.
Hoffe es ist verständlich
Das Abfragen der Pins habe ich natürlich in eine Funktion verpackt die ich halt immer wieder aufrufe(n muss, da nicht alle Pins per ISR abgefragt werden können).
Um aber aus der Schleife oder Funktion auszubrechen in der ich mich momentan befinde löse ich das bisher mit einer if-Abfrage für gesetzte Flags und einem entsprechenden return- oder break-Befehl.
Ist jetzt nicht wirklich viel Code der dann dahinter steckt, aber ist etwas nervig den jedes mal wieder an die nötigen Stellen zu kopieren.
Dachte ich könnte das auch in eine Funktion packen, da müsste ich dann ja nur anfangen zu tippen, er schlägt es mir vor, Enter und das wars dann.
Nur glaube ich nicht, dass das funktioniert...
break funktioniert ja nur wenn er sich unmittelbar in einer Schleife befindet und return springt aus der aktuellen Funktion raus.
Wenn ich also die Funktion zum Ausbrechen in einer anderen Funktion Y aufrufe, dann bleibe ich ja in Y oder?
Kennt ihr Möglichkeiten für mein Anliegen, oder muss ich dabei bleiben, das immer wieder einzutippen?
Der Code sieht schematisch aktuell ungefähr so aus:
Code:
Funktion_AB()
{
while(c == 1)
{
Pinabfrage();
if(Flag_x == 1)
{
//mach irgendwas
break;
}
[... anderer Code der hier unwichtig ist ...]
}
if(Flag_x == 1)
{
//setze andere Flags z.B. oder sonstwas
return;
}
[... anderer Code der hier unwichtig ist aber im Falle Flag_x == 1 übersprungen bzw. nicht ausgeführt werden soll ...]
}