[C#.NET]SerialPort ontvangt wel data, BytesToRead blijft 0

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Romke
  • Registratie: Januari 2004
  • Laatst online: 10-09-2021

Romke

Dieselhead

Topicstarter
Situatie is als volgt:

- Windows 7 VM (VMWare Player 3.1)
- Visual Studio 2008 SP1 Express
- .NET Framework 3.5
- Targus USB Serial adapter

Ik probeer met behulp van de hier gevonden XModem klasse een firmware file te uploaden naar een apparaat.
Om dit te testen gebruik ik HyperTerminal in een andere VM met een tweede USB Serial adapter.

Het vreemdste is nu: Gister werkte dit, en vanmorgen werkte het opeens niet meer.
In de XModem klasse zit in de functie XModemTransmit een aanroep naar de functie ReadByte op de instance van de SerialPort.
Het programma blijft hier hangen, wat opzich logisch is, aangezien de BytesToRead property van de instance van SerialPort de waarde 0 blijft houden, wat zou impliceren dat er geen data binnenkomt. (Om een XModem transfer te starten moet de ontvangende zijde eerst een NAK character sturen).
Ware het niet dat er wel gewoon data binnenkomt. (Gecontroleerd met een RS232 spy).

Ik heb op het moment dat ik de XModem transfer wil doen nog geen listeners aan het SerialDataReceived event gekoppeld. Als ik dat wel zou doen gaat de SerialPort asynchroon werken. De events komen dan via een aparte thread binnen. Probeer je dan in een andere thread ReadByte aan te roepen, levert je dat een Exception op.

Een transfer tussen twee HyperTerminal sessies werkt overigens gewoon.

Is er bij uwe aller weten een oorzaak te bedenken waardoor mijn .NET applicatie niets meer binnen krijgt?

If you buy a rubbish car, you say: I have no interest in cars. If you have no interest in cars, you have no interest in driving. And if you have no interest in something, it means you are no good at it, which means you must have your license taken away.


Acties:
  • 0 Henk 'm!

  • eBoR
  • Registratie: April 2011
  • Laatst online: 10-09 20:09
ik heb bij vm workstation het zelfde gehad. buffersize omlaag gegooid en het deed

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Betekent 'BytesToRead' wel wat je denkt dat het betekent? In java heb je bijvoorbeeld op veel InputStreams een methode 'available()' met als omschrijving:
Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream.
Bijna alle implementaties geven altijd nul terug, en je moet het dan ook bijna nooit willen gebruiken. Toch denken veel beginners dat available() betekent hoeveel bytes er nog te lezen zijn.

  • Romke
  • Registratie: Januari 2004
  • Laatst online: 10-09-2021

Romke

Dieselhead

Topicstarter
Remus schreef op donderdag 11 augustus 2011 @ 10:27:
Betekent 'BytesToRead' wel wat je denkt dat het betekent? In java heb je bijvoorbeeld op veel InputStreams een methode 'available()' met als omschrijving:

[...]

Bijna alle implementaties geven altijd nul terug, en je moet het dan ook bijna nooit willen gebruiken. Toch denken veel beginners dat available() betekent hoeveel bytes er nog te lezen zijn.
Ik gebruik BytesToRead niet. Het valt me in de debugger op dat de waarde van die property 0 blijft op het moment dat ReadByte() blijft hangen.

Dat verhaal van Java ken ik ja. Ooit eens die fout gemaakt. ready() en available()

If you buy a rubbish car, you say: I have no interest in cars. If you have no interest in cars, you have no interest in driving. And if you have no interest in something, it means you are no good at it, which means you must have your license taken away.