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端設定一致就可以了 序列通訊的資料位,起始位,停止位?這是你自己定義的通訊協議,起始位一般用作通訊同步...