2013-06-10 2 views
-1

저수준 언어에서 사용할 수있는 것처럼 C#에서 데이터 전송 (TX 버퍼가 비어 있거나 "UART 전송 완료") 이벤트를 발생시키는 방법이 있습니까?거기에 C#에서 DataSent 이벤트를 가질 수있는 방법이 있습니까?

이 명시 적으로 "전체 전송 UART"의 사용을 필요로 운영 체제가 EV_TXEMPTY 옵션과 그에 대한 신호를 WaitCommEvent() 가지고

+6

코드에 대해 조금 이야기하고 코드를 사용하여 수행하려고 시도한 사항에 대해 궁금한 점이 있다면 도움이 될 것입니다. –

답변

3

방해 대학 프로젝트의 일부입니다. 하지만 SerialPort 클래스에서는이 문제가 전혀 공개되지 않았습니다. BytesToWrite 속성은 전송 버퍼에 남아있는 바이트 수를 알려줍니다. 이벤트가 아니라면 타이머로 폴링해야합니다.

SerialPort 클래스의 EV_TXEMPTY 이벤트를 의도적으로 노출시키지 않으려 고 의도적으로 추가 한 것이므로 매우 쉽게 추가 할 수있었습니다. 그 사건의 문제는 직렬 포트에서 일어나는 일들을 아는 것은 무용지물이라는 것입니다. 그것은 단지 전송 버퍼가 비어 있다고 말하며, 이 아니며은 포트가 데이터를 전송했는지 여부에 대해 아무 말도하지 않습니다. 최신 UART 칩은 일반적으로 16 바이트 깊이의 버퍼를 가지고 있으며, 전송되기 바로 전에 바이트를 저장합니다. 인터럽트 오버 헤드를 낮추고 바이트 사이의 갭을 피하는 데 유용합니다. 신호가있어 버퍼가 비어 있다고합니다. 그것은 네이티브 드라이버 인터페이스에 추가되지 않았습니다.

왜 이것이 필요한지 불분명합니다. 메시지는 분명합니다. 당신은 이것을 원하지 않습니다.

관련 문제