Linux c串列埠通訊nread 0,求分析

2021-09-30 17:39:23 字數 1368 閱讀 6852

1樓:匿名使用者

經過驗證,串列埠應該沒有資料讀上來,所以導致讀到的資料的數量是0,列印出hello是因為buff本身初始化就是hello,所以顯示是hello

#include

#include

#include

#include

#include

#include

#include

int main()

printf("fd = %d\n",fd);

nread = read(fd,buff,8);

//while( (i = read(fd,buff,512) ) > 0 )

// =i ;

close(fd);

return 0;}

2樓:匿名使用者

串列埠沒有接收到資料,接收緩衝區裡面就沒有資料,nread肯定就是0啊,你得用個除錯軟體傳送一組資料,然後再接收.

另外參考一下我的串列埠初始化函式,這個是肯定沒問題的:

int initcomm(char *devname)

new_termio.c_cflag = b115200 | cs8 | clocal | cread;

new_termio.c_iflag = ignpar; //ingorn parity check error

new_termio.c_oflag = 0;

new_termio.c_lflag = 0;

new_termio.c_cc[vtime] = 0;

new_termio.c_cc[vmin] = 0;

tcflush (fd, tciflush);

設定流控制,波濤率,校驗位

return fd;

}fd = initcomm("/dev/ttys0");

buf[nread]='\0' 什麼意思

3樓:董俊錕

'\0' 是字串結束標誌,前面是你定義的字元陣列吧

4樓:

等同於buf[nread]=0;

ascii碼儲存中的結束碼。

5樓:匿名使用者

buf[0]='\0' 就是給buf的第一個字元賦值'\0'

buf[nread]='\0' 就是給buf的第nread個字元賦值'\0'

C串列埠通訊應答式傳送

將要傳送的命令新增到list中,開一個執行緒去依次發次list中的命令。設定一個 標誌,傳送後將標誌isreceived設定為false,然後迴圈判斷該標誌的狀態,直到變為true即接收到有效資料,或者時間超過一定後還為false視為接收出錯或者超時。在serialport的接收事件datarece...

微控制器串列埠通訊資料高位總是出錯

這個應該是晶振的原因,9600是針對11.05?具體那個值我忘了 但是你手裡的微控制器,應該是12m的吧,會產生影響 先把if ti 1 改成while ti 0 再說 我也遇到了同樣的問題,把串列埠的傳送和接收腳短接時,傳送和接收是正常的。有誰知道怎麼解決的請幫個忙!採用非同步方式傳送資料,偶校驗...

串列埠通訊如果沒有停止位會出現什麼情況

無論你怎麼設定都可以,只要傳送端和接收端設定一致就行 停止位1個或2個本質上沒有差別,只是時間不同 停止位長的傳輸準確率高,效率會變低一些。只要接收方和傳送方一致都可以 霍霍 神馬情況都會出現啊 2端設定一致就可以了 序列通訊的資料位,起始位,停止位?這是你自己定義的通訊協議,起始位一般用作通訊同步...