unterprogrammproblem!
-
Ich nehme nicht an, dass der Prozessor Multithreading unterstützt, oder?
Somit würde ich dazu raten nach jedem 'Sinus durchlauf' einmal in die Empfangsschleife des Prozessors zu wechseln (Also die Schleife, in der er die "A"s und "B"s verarbeitet)
Sollte kein "B" angekommen sein, starte neuen Sinus-Durchgang...
Voraussetzung ist, dass du non-blocking lesen kannst, ob ein "B" angekommen ist. Wenn das nicht geht, habe ich leider auch keine Idee.
-
point schrieb:
ich bräuchte nen befehl um aus dem Unterprogramm komplett rauszukommen, sodass ich wieder in mein main() komme!
einfach return!
Eventuelle lokale Variablen in einer struct speichern, die per call by reference an die Funktion beim nächsten Aufruf wieder übergeben wird. Hier kannst du auch die Funktion dann direkt an beliebigen Stellen unterbrechen:struct LocalData { int pos; int i; bool finished; }; void init(LocalData& local) { local.pos=1; local.i=0; local.finished=false; } void funktion(LocalData& local) { local.finished=false; switch(local.pos) { case 1: ++local.pos; for(local.i=0; local.i<10; ++local.i) { cout<<"in Funktion\n"; return; case 2: continue; } } local.finished=true; } int main() { LocalData data; init(data); while(!data.finished) { cout<<"in Main\n"; funktion(data); } }
-
soweit mich nicht alles täuscht unterstüten mehr oder weniger alle microprozessoren interrupts, einfach nen interrupt aufs keyboard setzen und fertig
-
Korbinian schrieb:
soweit mich nicht alles täuscht unterstüten mehr oder weniger alle microprozessoren interrupts, einfach nen interrupt aufs keyboard setzen und fertig
... ansteuern tu ich das ganze dann mit visual basic via rs232!
Die Daten werden über RS232 gesendet. Ich kenn mich mit Hardwarenahen dingen icht aus, wüsste aber nicht wie da ein Keyboard Inerrupt helfen soll !?
-
jo klar, das kommt davon, wenn man die posts nur oberflächlich liest: ich hab übersehen, dass der mc vom pc aus gesteuert wird. dachte es wäre ein eigenständiger mc
*tipvonvorherzuruecknehm*
-
Ich habs bereits geschafft innerhalb der While schleife jedesmal abfragen ob ein "B" kommt! Dann hab ich einfach ein break gemacht! prinzipiell funktionierts ja das programm bleibt stehn! nur sobald ich dann ein anderes Zeichen schicke gehts wieder weiter...
und außerdem ist das keine elegante lösung! Gibt es keinen Befehl wie man ein Unterprogramm wieder schließt? also so wie man eins öffnet mit zb Unterprogramm();
gibts da nichts wie man das wieder schließen kann?
-
Wie man eine Funktion verlässt?
return Value;
Wie man eine Schleife verlässt?
Run=true; while(Run==true){ char Value; cin >> Value; switch(Value){ case 'Q': Run=false; break; case 'G': break; } }
Ich hoffe das hast du gemeint.
cu max
-
Es sei denn, es ist eine void funktion, dann einfach
return;
-
Du scheinst von Programmierung keine Ahnung zu haben, auf keinen Fall Erfahrung.
Solche Unterprogramme werden in C++ Funktionen und in Visual Basic Prozeduren genannt.
Um dieses ,,Unterprogramm'' zu beenden, musst du einfach, wie Shade of Mine schon sagte, einfach hinschreiben:return; [/code] Dann wird die Funktion beendet und das Teil landet wieder in der Funktion, die diese aufgerufen hat, i.d.F. main. Von dort aus geht es dann an der Stelle weiter, wo die Funktion aufgerufen wurde. [cpp] #include <iostream> using std::cout; using std::endl; void foo() { cout << "2"; return; } int main() { cout << "1" << endl; foo(); cout << "3" << endl; return 0; }
I.d.F. ist das return aber nicht nötig, da bei Ende der Funktion diese automatisch beendet wird.
MfG MAV
-
CarstenJ schrieb:
Es sei denn, es ist eine void funktion, dann einfach
return;
Void Funktionen sind kein Standard.
-
Void MAIN Funktionen sind kein Standard, alles andere natürlich ohne weiteres legal.
-
*duck* deshalb meckert der Compiler, sorry.
-
also wenn ich dann in der While schleife einfach das Zeichen B mit if abfrage und dann return; mache bin ich wieder im hauptprogramm?
also so in der art:
if(Rs232buffer==B)
{
return;
}Ich werds probieren sobald ich am pc bin wo ich meine ganze software drauf hab!
Aber schonmal danke im voraus