
从1980年代,Kvaser就开始CAN产品的研发,在相关产品开发领域有近40多年的经验,对CAN和相关总线技术有着非常深入的研究。广州智维电子科技是KVASER的中国引进者,我们会不定期分享一些有趣的发现和特定情况的技术处理。
在开发严重依赖通信协议的软件应用程序时,关键问题之一是:应用程序快速地处理传入的报文,而不会丢弃报文。本文就将分享如何使用CANlib检测CAN帧溢出情况。
在将CAN数据导入应用程序时发生丢失CAN帧的情况,通常是由于应用程序花费太多时间处理某一报文,应用程序暂停等待用户交互,或者应用程序正在等待共享系统资源,如数据文件等等。不管什么原因,应用程序开发人员应该计划检测这些丢弃的报文,以防止在由应用程序行为导致错误时搜索系统问题。
为了检测这个问题,CANlib提供了三种方法来检查接收缓冲区状态和确定CAN帧是否已经丢弃:
1.canRead标志参数
用于确定CAN帧是否已被丢弃的第一种方法是监视由canRead函数返回的标志参数。标志参数包含两个位,它们表示在此函数调用和和当前调用返回的最后一个报文之间是否发生软件或硬件溢出。这些位被定义为用于硬件溢出的canMSGERR_HW_OVERRUN和用于软件溢出的canMSGERR_SW_OVERRUN。你也可以使用canMSGERR_OVERRUN掩码同时检查这两种情况。因此,当应用程序检查到这些位集中的一个时,应用程序就会获知在当前CAN帧和接收的前一个CAN帧之间丢弃了报文。
要了解在使用软件的情况下如何显示,可以假设一个接收缓冲区,它可容纳10帧(当然,CANlib中的实际默认接收缓冲区大小远大于10)。硬件已接收到10个CAN帧并将其放入可填入的缓冲区。


文章介绍了在开发依赖CAN通信协议的软件时,如何利用CANlib库检测CAN帧溢出问题,包括通过canRead标志参数、canReadStatus和canIOCTL_GET_RX_BUFFER_LEVEL方法检查接收缓冲区状态。监控溢出对于防止应用程序错误和确保报文完整性至关重要。
最低0.47元/天 解锁文章
7597

被折叠的 条评论
为什么被折叠?



