Ich habe hier ein Problem, mit welchem ich gerade nicht weiter komme:
Ich habe ein Programm welches mir Daten an einen µC sendet und wieder
empfängt. Das funktioniert eigentlich auch ganz gut - bis auf den
Umstand das eine Variable aus dem Receive Handler nicht übernommen wird:
1 | //..
|
2 | volatile string varHardwareVersion; //Volatile
|
3 | //..
|
4 |
|
5 | private void butInfoClick(object sender, EventArgs e) //Button Event Handler
|
6 | {
|
7 | FormControllerInfo f = new FormControllerInfo(); //New Form from FormControllerInfo
|
8 |
|
9 | f.mComPort = ComPort.PortName; //Variable set
|
10 |
|
11 | Gauge.mGetHardwareVersion(); //Set Command to µC
|
12 | ComSend(Gauge.mByteToSend); //Send Command to µC
|
13 | Gauge.SetupGauge(0x02); //Reset µC to default
|
14 |
|
15 | f.mVersionString = varHardwareVersion; //!!! Hier Fehler !!!!
|
16 | this.Text = varHardwareVersion; //!!! Hier Fehler !!!!
|
17 |
|
18 | f.Show(); //Show Form
|
19 | }
|
20 |
|
21 |
|
22 | //... Der Com Port Receive Handler....
|
23 |
|
24 | public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
|
25 | {
|
26 | SerialPort sp = (SerialPort)sender; // ComPort from object sender
|
27 |
|
28 | string indata = sp.ReadLine(); // Get uart data
|
29 | char[] inchar = indata.ToArray(); // convert to byte array
|
30 |
|
31 | //vol_AppHead(indata); // Debug: Work (volatile)
|
32 |
|
33 | varHardwareVersion = inchar[0].ToString(); // First byte to string: work
|
34 | vol_AppHead(varHardwareVersion); // show value: Work!!
|
35 |
|
36 | switch (inchar[0])
|
37 | {
|
38 | case 'x':
|
39 | break;
|
40 | case 'v':
|
41 | break;
|
42 | case 'V':
|
43 | //varHardwareVersion = indata;
|
44 | break;
|
45 | }
|
46 | }
|
Soo... also der String wird empfangen und der erste Byte in die Variable
varHardwareVersion geschrieben (spielt auch keine Rolle ob der indata
String geschrieben wird, kommt aufs gleiche raus), dann wird sie mir
über eine geschützte Funktion (vol_AppHead) ausgegeben. Das klappt
wunderbar.
Nun aber ist die Variable wieder zurück in butInfoClick wieder leer. Da
wo in den Kommentaren !!!HIER FEHLER!!! steht. Jedoch ist sie doch aber
volatile geschützt, wieso ist sie denn dann leer wenn sie doch aber
beschrieben wird und auch angezeigt wird?!
Ich stehe aufm Schlauch :D