PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] SerialPort讀取長度
作者:
getaway
(夏天快走!!!)
2020-05-28 19:08:33
直接切入正題
訪問COM Port使用了
CreateFile
ReadFile
WriteFile..等Win32 API函式
用到"ReadFile"做讀取時發現一個跟以前
使用C# Serial.Read很不一樣的地方搞不太懂
問題1.
C#使用 Serial.Read時可以以BytesToRead被動決定要讀取時的指定長度,
反之在C/C++使用ReadFile反而是要指定主動決定要讀取多長,
可是使用者如果不知道回傳資料長度如何指定?
BOOL WINAPI ReadFile(
__in HANDLE hFile,
__out LPVOID lpBuffer, // 字串Buffer
__in DWORD nNumberOfBytesToRead, // 要讀取的Byte數
__out LPDWORD lpNumberOfBytesRead, // API回填已讀取Byte數
__in LPOVERLAPPED lpOverlapped // OVERLAPPED
);
作者:
SeamusBerloz
(軒摩斯)
2020-05-28 19:51:00
lpNumberOfBytesRead 不就是回傳長度嗎?nNumberOfBytesToRead 應該是指最多不要超過此長度吧。
作者:
annheilong
(方格子)
2020-05-28 23:30:00
一種做法是跟他說buffer大小,然後看實際讀多少回來通常protocol讀完head後面 會再讀取後續資料長度例如讀完0x02 head後,再讀2 bytes知道剩下多長(不含tail跟CRC所以讀到1 byte 0x02後,再讀2 bytes知道後面長度然後回圈讀取後面長度 讀完再讀tail跟CRC
作者:
getaway
(夏天快走!!!)
2020-05-29 02:18:00
開心,原本還擔心不知道達人我在問什麼,看完回覆後有一些可以嘗試的想法了,以protocol來處理也可以,只是蠻確定以前處理C#時的ByteToRead在溝通介面上就已經預知stdin buffer可以讀進的資料長度
作者:
kobe8112
(小B)
2020-05-29 11:55:00
因為那不是預知啊...那是已經放在緩衝區的資料
作者:
getaway
(夏天快走!!!)
2020-06-03 11:20:00
補上意外發現的處理方式但未經驗證SetCommMask跟WaitCommEvent有興趣的參考如右邊連結
https://reurl.cc/L3DxkX
繼續閱讀
[問題] main()和main(void)的差別
pandaren0905
[問題] 不能無法用malloc初始化物件
ericerix
Re: [問題] MFC的滑鼠事件
enthos
[問題] MFC的滑鼠事件
student23489
請問namespace前的雙冒號
butterflyred
[問題] CLion的gcc.exe損壞
jack41402
[問題] 為何外部傳Object 可讀其Object private值
joejoe14758
Re: [討論] 對於同事的coding style感到很感冒
poyenc
Re: [討論] 對於同事的coding style感到很感冒
lovejomi
Re: [討論] 對於同事的coding style感到很感冒
lovejomi
Links
booklink
Contact Us: admin [ a t ] ucptt.com