最近要寫個Win32控制臺程式,主要是和一個串口設備通信,想發送命令到設備,然后收到設備回傳的資料顯示在控制臺視窗上,找了些歷程看,也大概知道了整個串口驅動、讀寫的流程,就是creatfile()配置啊,DCB配置啊之類的,但是發現readfile()和writeflie()都是在主函式中呼叫的,而我想一直不間斷地進行串口的讀寫、資料的收發,因此我并不太理解資料的傳遞是怎么處理的,只知道資料從readfile()傳到我的buff里,所以想問下一個資料要從設備經過串口通信列印到我的控制臺上,究竟經過了什么?它緩沖到了哪里?程式在后臺是通過中斷方式讀取資料的嗎?
uj5u.com熱心網友回復:
因為小弟剛從嵌入式方面轉過來,所以比較熟悉單片機常用的 中斷方式 讀寫串口,對windos編程的概念和程式的運行機制可能還不是很清楚。。。。總覺得串口讀寫在main函式里執行貌似不能實作實時性和后臺性。。。。uj5u.com熱心網友回復:
我比較想要實作那種功能。。。控制臺程式,然后輸入指令,設備接受到指令后就不斷向主機發送資料,控制臺界面就刷刷刷地源源不斷冒出這些資料……uj5u.com熱心網友回復:
用串口控制元件MSCOMM 百度下 MSCOMM編程 資料一大堆你在要發資料 建議你開個執行緒發送,接收的時候是自動接收的,只要串口有資料過來,自動會觸發接收函式 這個比較方便。
uj5u.com熱心網友回復:
看 MSDN 檔案Serial Communications in Win32
uj5u.com熱心網友回復:
要哭了。。。大家都是這樣直接看MSDN的么。。。英語亞歷山大
uj5u.com熱心網友回復:
翻譯的也很多啊 百度下http://blog.csdn.net/zcube/article/details/8591972
uj5u.com熱心網友回復:
這里已經給出了方法了。 需要不間斷發送資料的話需要啟動執行緒,主執行緒接收信令,子執行緒發送資料!
uj5u.com熱心網友回復:
要想做到比較實時,1)讀下位機的代碼一定要寫在執行緒中,寫下位機代碼可以寫在主程式中
2)要采用異步方式, 一般打開設備是這樣寫的
comm_reader_handle = CreateFile(
( LPCTSTR )"\\\\.\\COM12", // COM1
GENERIC_READ | GENERIC_WRITE,
0, //share mode: no share
NULL, //securiy attributes
OPEN_EXISTING, //Open disposition
FILE_FLAG_OVERLAPPED,
NULL );
3)在執行緒中,要不停的去讀取串口,讀到一個緩沖區后,然后還要有程式對讀到主機的資料進行分析,區分包頭,包尾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/121848.html
