Forum: PC-Programmierung Firmwareversion am PC einlesen


von Anna (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

In meinem µC habe ich im Flash die Firmwareversion abgespeichert.
Diese möchte ich nun über die serielle Schnittstelle am PC anzeigen 
lassen.
Den Quellcode für die Datenepmfangsroutine hab ich im Anhang zur 
Verfügung gestellt. Mein Problem ist nun das ich folgende Fehlermeldung 
bekomme und die Firmwareversion nicht angezeigt wird:

Ungültiger threadübergreifender Vorgang: Der Zugriff auf das 
Steuerelement richTextBox1 erfolgte von einem anderen Thread als dem 
Thread, für den es erstellt wurde.

Viele Grüße
Anna

: Verschoben durch Moderator
von C# (Gast)


Lesenswert?

Schau mal hier (und vor allem die 2 Links auf weitere Infos):
http://www.entwickler-ecke.de/topic_Ungueltiger+threaduebergreifender+Vorgang_81735,0.html

von Anna (Gast)


Angehängte Dateien:

Lesenswert?

Das mit dem Invoke hat das Problem nun im Debugmodus gelöst.
Die Firmwareversion wird mir angezeigt. Nur wenn ich das Programm im 
bin/Debug Ordner starte so stürzt das Programm ab. Das dürfte doch gar 
nicht abstürzen?

Gruß
Anna

von Anna (Gast)


Angehängte Dateien:

Lesenswert?

Wenn ich den relevanten Teil auskommentiere so zeigt es mir die 
Firmwareversion logischerweise nicht mehr an aber das Programm stürzt 
wenigstens nicht ab. Es muss also im auskommentierten Teil noch ein 
Fehler versteckt sein.

von Thomas W. (nomared)


Lesenswert?

setz den Teil mal in den try Bereich und gib den Fehler (ex.Message) in 
der richtextbox aus.
1
try
2
{
3
    // code einfügen
4
5
}
6
catch (Exception ex)
7
{
8
                
9
}

von Anna (Gast)


Lesenswert?

Ich denke das dieser Befehl mein Problem ist:
if (receivedData.ToString() !=  byteSent[0].ToString())   // if received 
and already sent data are not equal (Failure!)

Wenn ich diesen Befehl auskommentiere stürzt nichts mehr ab.
Nur die Frage ist warum sollte an dem Befehl was nicht stimmen?

byte[] byteSent;

private void serialPort1_DataReceived(object sender, 
SerialDataReceivedEventArgs e)
{
  receivedData = serialPort1.ReadByte();
  if (receivedData.ToString() !=  byteSent[0].ToString())
  {
     .... Programm
  }

Gesendet wird folgendermaßen:

byte[] byteToSend =  { Convert.ToByte(128) }; // Sendedaten
serialPort1.Write(byteToSend, 0, 1);
byteSent = byteToSend;

Gruß
Anna

von Anna (Gast)


Angehängte Dateien:

Lesenswert?

Wenn ich ein try catch um den Block lege und mir die Message ausgeben 
lasse bekomme ich folgendes siehe Bild.

Zeile 90 ist übrigens diese hier:

if (receivedData.ToString() !=  byteSent[0].ToString())

Hier muss also der Fehler liegen nur ich verstehe noch nicht ganz warum?

Gruß
Anna

von Thomas W. (nomared)


Lesenswert?

byteSent ist scheinbar noch nicht inizialisiert, wenn 
serialPort1_DataReceived aufgerufen wird.

tausche mal die 2 Zeilen:
1
serialPort1.Write(byteToSend, 0, 1);
2
byteSent = byteToSend;
1
byteSent = byteToSend;
2
serialPort1.Write(byteToSend, 0, 1);

von Anna (Gast)


Lesenswert?

Man könnte doch statt dem Zeilen tauschen auch byteSent initialisieren 
am Anfang?

z.B so
byte[] byteSent={0};

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.