你的這個串口設備在打開(也就是調(diào)用open函數(shù)獲取設備描述符)的時候設置的是非阻塞方式。導致串口上沒數(shù)據(jù)的時候read也立即返回,但是你的while已經(jīng)把有效的數(shù)據(jù)讀走了,if里面讀到的一定是空的,所以什么也不打印。
創(chuàng)新互聯(lián)服務項目包括聶拉木網(wǎng)站建設、聶拉木網(wǎng)站制作、聶拉木網(wǎng)頁制作以及聶拉木網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,聶拉木網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到聶拉木省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
建議
1. 在打開串口設備時使用阻塞方式,不會設置的話查查open系統(tǒng)調(diào)用的幫助,它有個flag;
2. 把while循環(huán)內(nèi)的if語句去掉。
這樣寫肯定會寫死的啊..寫(也就是串口發(fā)送數(shù)據(jù))實際應用不會這么頻繁的.樓主可以在寫后加上一個sleep(1);這樣就不會寫死了..
高并發(fā)讀寫這樣設計也是錯誤的應該用隊列來處理..
首先你確定你那串口是否有東西可讀? 就是你上面說的“一個文件不停的寫數(shù)據(jù)到串口”!你可以先不這樣讀取,你可以在終端上用cat試試是否有數(shù)據(jù)可讀:cat /dev/ttyS0
如果有的話,那你就檢查串口設置是否正確,如波特率,數(shù)據(jù)位,停止位,校驗位等!
最后就是你讀取的函數(shù)了,看看先不要用printf打印字符串了,先看看十六進制是否有,然后再看字符等!
就是以上一些,你還可以參考Linux下串口文檔,百度上很多的……
用echo可以,不過需要一個串口的軟件,就跟win的超級終端一樣,開啟后連接串口,然后另一邊發(fā)送數(shù)據(jù),你這邊就能顯示出來,我記得好像叫做minicom