※ 引述《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不是你想的时间区间内. 所以有时候你会看到某些装置会闪一下
或者 会有画面不是一整个替换
有残留前一个画面的一些资料在上方会下方的页面资料之类的