※ 引述《kuangs (kuangs)》之銘言:
: 想請問 我目前寫了程式 來收uart的資料
: 如果透過pl2303 chip 收資料 都是正常的
: 但從kernel gpio (已確定GPIO設定正確) 來收資料 卻會有掉code 的情形
: 用的程式也是同一個
: 目前所知 pl2303 是模擬USB
: 而 gpio 是直接收到kernel
: (上述如有錯誤 請指教)
: 兩個在收uart資料上有甚麼不同 導致這個問題??
: 補充一點
: 從UART 進來的資料 有Binary資料
傳統的uart都會有internal fifo for buffering
這是 hw buffer. 你可以看一下 16550 spec
trigger level可以設定fifo多少水位觸發中斷
你用gpio 假設 data rate is 115200
等於你一秒要觸發 115200次 這還不包含是否會有glitch錯誤的判斷
有些gpio會有bouncing功能 你可以設定減少這種狀況
但若單純用115200次好了, 除非你確保其他中斷都不會有超時情形
不然收錯就是很正常的狀況
以前在某公司解過幾個問題 一個是 DDC 因為沒有hw buffer
最後就是請對方修改sw protocol, re transmit. 靠sw recover.
另一個是uart. sharp printer 在protocol layer於某個command一次送了64 bytes
底層的uart int因為處理時byte by byte收 反映來不及 造成printer開機送了個NACK
整個就不會動. 另外還有處理過 PTZ dome也是相同的問題
這是即時問題 有些軟體code看起來就是明顯有bug
常常見到的就是類似 user mode下 sudeo如下
wait hw condition (ex: blanking interval)
firing hw
這樣的code都是有問題的 因為你無法確保是否firing hw時context switch
然後造成firing不是你想的時間區間內. 所以有時候你會看到某些裝置會閃一下
或者 會有畫面不是一整個替換
有殘留前一個畫面的一些資料在上方會下方的頁面資料之類的