Hallo zusammen
ich sitze gerade an meinem ersten größeren Projekt. Ich hab mir ein PCB
gebastelt, das funzt auch alles wunderbar, als Datenschnittstelle
benutze ich den FT232BL von FTDI.
Auf dem PC sind die CDM Treiber installiert, wo ich den Virtuellen
Comport Teil von verwende.
Derzeitig ist es so, das ich daten in einer TXT datei speichere, dieser
werden von meinem C# Programm ausgelesen und an den Mikrocontroller
übermittelt, damit dieser seine arbeit beginnen kann. DAs funktioniert
auch.
Jetzt folgende Verstädnisfrage:
Nachdem ich die Funktion ausgeführt habe, die die Daten an den MSP430
übermittelt hat, soll das Programm in eine Art Ruhezustand verfallen,
und auf das Event reagieren, das neue Daten im Eingangspuffer gelandet
sind.
Es wird so sein das mein MSP alle X sekunden einen String sendet, den
ich im Programm verarbeiten will und dann abspeichern will. Wie diese
Verarbeitung laufen soll ist schon alles fertig, nur wie das mit dem
Ruhezustand laufen soll, bzw so einer art Eventhandler ist mir nicht
vollständig klar.
Ich will ja nicht ne endlos whileschleife laufen lassen die 100% cpu
last dann erzeugt, sondern einfach einen Ereignisorientierten Aufruf
einer Funktion, oder eine Funktion die ich aufrufe, und solange aktive
bleibt bis ich durch den Mikrocontroller ein "Ende" sende.
Hat sowas jemand schonmal in C# gemacht? bzw kann mir einer erklären wie
das laufen soll?
gez.
RizzoRat
Ja ich benutze die System.IO.Ports.Serialport. Und von dem DataRecieved
ereignis habe ich auch schon gelesen, mir gehts um die Struktur des
Programes, wie mache ich eine Funktion von dieses DataRecieved abhängig?
Quasi werden erstmala lle Sachen vorbereitet und dann soll er halt in
diesen von mir beabsichtigeten wartezustand fallen udn jedesmal wenn
daten kommen die funktionen aufrufen, die die den string zerlegen
verarbeiten und wegspeichern.
ok.
ich versteh jetzt nicht wo das problem ist.
Du hast eine Funktion mit der die Daten gesendet werden.
Das empfangen kannst du ja dann in dem genannten Ereignis tun:
Hi RizzoRat!
Wenn ich Dein Problem richtig verstanden habe, willst Du im
Hauptprogramm auf ein Event warten, das anzeigt, daß die Daten vom
MSP430 vollständig übertragen wurden und zur Verarbeitung anstehen. Du
weißt allerdings nicht, welches Event Du dazu verwenden kannst.
Für solche Zwecke gibt es im Namespace System.Threading die Klassen
AutoResetEvent bzw. ManualResetEvent. Du erzeugst im Hauptprogramm eine
Instanz einer solchen Klasse. Wichtig ist, daß sowohl das Hauptprogramm
als auch ein Thread, der das asynchrone Empfangen der Daten vom MSP430
erledigt, Zugriff auf dieses Event-Objekt haben. Am Ende der
Initialierung des Hauptprogrammes startest Du Deinen Daten-Lese-Thread,
der das Event triggert, sobald ein Datensatz vollständig vorliegt
(Aufruf der Set-Methode des Event-Objekts). Das Hauptprogramm wartet
während dessen darauf, daß das Event vom Thread getriggert wird (Aufruf
von WaitOne des Event-Objekts).
Sowohl die Verarbeitung als auch das Lesen der Daten vom MSP430 kannst
Du natürlich in einer Schleife ausführen. Wichtig wäre am Ende des
Hauptprogramms, daß Du die Thread-Schleife vom Hauptprogramm aus
beendest und mit dem Aufruf der Methode Join() des Thread-Objekts darauf
wartest, daß der Thread sich tatsächlich beendet.
Gruß
Markus
Markus Volz wrote:
> Für solche Zwecke gibt es im Namespace System.Threading die Klassen> AutoResetEvent bzw. ManualResetEvent. Du erzeugst im Hauptprogramm eine> Instanz einer solchen Klasse. Wichtig ist, daß sowohl das Hauptprogramm> als auch ein Thread, der das asynchrone Empfangen der Daten vom MSP430> erledigt, Zugriff auf dieses Event-Objekt haben. Am Ende der> Initialierung des Hauptprogrammes startest Du Deinen Daten-Lese-Thread,> der das Event triggert, sobald ein Datensatz vollständig vorliegt> (Aufruf der Set-Methode des Event-Objekts). Das Hauptprogramm wartet> während dessen darauf, daß das Event vom Thread getriggert wird (Aufruf> von WaitOne des Event-Objekts).
Viel zu kompliziert. Er verwendet den Serialport, der hat schon ein
passendes Event.
Siehe: Beitrag "Re: C# SerialPort Events Verständis"> Sowohl die Verarbeitung als auch das Lesen der Daten vom MSP430 kannst> Du natürlich in einer Schleife ausführen. Wichtig wäre am Ende des> Hauptprogramms, daß Du die Thread-Schleife vom Hauptprogramm aus> beendest und mit dem Aufruf der Methode Join() des Thread-Objekts darauf> wartest, daß der Thread sich tatsächlich beendet.
Er benutzt Windows-Forms. Es gibt hier kein Hauptprogramm im klassischen
Sinn.
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.