canfestival使用中遇到的BUG

将canfestival移植至stm32在使用过程中发现canDispatch存在已接收到正确的数据

void canDispatch(CO_Data* d, Message *m)

但getWriteResultNetworkDict()与getReadResultNetworkDict()偶尔会发生读取不到报文的情况

经调试排查,发现是由于在can接收中断中调用canDispatch导致的。

修改canfestival源代码后问题解决

在文件sdo.c   函数getWriteResultNetworkDict()与getReadResultNetworkDict()

if (d->transfers[line].state != SDO_FINISHED)
    {
        // 原代码
        // return d->transfers[line].state; // 因为是在中断中解包,该值可能会变

        // 修改后的代码
        return SDO_DOWNLOAD_IN_PROGRESS; 
    }
/* If transfer not finished just return, but if aborted set abort code and size to 0 */
    if (d->transfers[line].state != SDO_FINISHED) {
	    if((d->transfers[line].state == SDO_ABORTED_RCV) || (d->transfers[line].state == SDO_ABORTED_INTERNAL)) {
            *abortCode = d->transfers[line].abortCode;
            *size = 0;
        }
        // 源代码
		// return d->transfers[line].state; // 2023-5-12 15:49:17 此处有会被改写为SDO_FINISHED,因为是在中断中处理

        // 修改后的代码
        return SDO_UPLOAD_IN_PROGRESS;
    }

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值