内核 CAN 驱动逻辑问题
这周一由于工作任务,领导让我修复 CAN 总线测试过程中出现的 BUG 。
我前两天阅读了 BSP 的 CAN 硬件驱动,与内核抽象的 CAN 设备驱动。
发现内核 CAN 代码逻辑存在如下问题:
- 自旋锁(一种锁的机制)随意加,明明不需要的地方也加。
- 内核 CAN 代码没有单独进行错误处理,导致 CAN 接口调用失败。
关于1,自旋锁需不需要的问题
在内核的 CAN 代码中,自旋锁在队列入队和出队的时候进行保护。但内核的 CAN 代码也创建了互斥锁用于资源互斥。貌似多余了
关于2,内核 CAN 代码没有进行错误处理
比如软件缓冲区溢出,此时,即使溢出了,也应该允许应用程序读缓冲区,但内核并没有这样处理,溢出后,应用程序直接读不了了。。。。