嵌入式設備linux C,讀串口的代碼如下,通過串口除錯工具按16進制發送資料,問題是每次讀到0x00就停止,比如發送 31 00 32,只能接收31?
do
{
memset(buff, 0, BUFFER_SIZE);
if (nread = read(fd, buff, BUFFER_SIZE) > 0)
{
printf("The received words are : %s\n", buff);
}
sleep(1);
write(fd, buff, strlen(buff));
} while(strncmp(buff, "quit", 4));
uj5u.com熱心網友回復:
printf("The received words are : %s\n", buff); 這行只能打出 0x31 了。要用回圈來打 %Xuj5u.com熱心網友回復:
如果發送31 00 32,就能全部列印出來uj5u.com熱心網友回復:
是不是串口初始化有哪個設定沒有設定好?uj5u.com熱心網友回復:
strlen 函式以’\0’(等于數值0)判斷是否到到字串尾,你那strlen 計算出來的長度是1,其實你只讀了一個位元組uj5u.com熱心網友回復:
sorry,write一個位元組uj5u.com熱心網友回復:
我也遇到此問題了。字串陣列里面遇到00就終止了。
uj5u.com熱心網友回復:
strlen 函式以’\0’(等于數值0)判斷是否到到字串尾;收發資料時注意使用uj5u.com熱心網友回復:
write(fd, buff, strlen(buff));//方法錯誤,長度不應該用字串函式來計算,應該使用讀到的資料長度。
修改為
write(fd, buff, nread);
其他部分的邏輯判斷 也應該根據情況來修改。,
uj5u.com熱心網友回復:
這應該是將0x00作為字串結束符了uj5u.com熱心網友回復:
不要是用strlen 直接使用長度轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/130230.html
標籤:應用程序開發區
上一篇:求助大佬關于過濾
下一篇:centos 7
