【研发日记】C/C++开发避坑秘籍(一)——CAN接收Buffer溢出Bug

文章目录

背景介绍

问题描述

分析排查

解决方案

总结归纳


背景介绍

        在一个嵌入式软件项目中,有一段使用C语言写的嵌入式代码,功能是把CAN总线上的几帧报文接收进来,并解析出数据。示例如下:

        乍一看感觉挺简单,想着直接用一个while循环,周期提取CAN buffer中缓存的数据就行了。但是就这么一个小应用让我栽了跟头,在整个工程中排查了几个小时才找到问题,下面就来分享一下这一小段个人经历。

        一开始代码调试的时候很顺利,一共接收5帧报文,总共40个信号,相关代码大概是下面这个样子:

void main(void)
{
//省略若干行

	if(Timer10ms == 1){
		do{
			ret = GetCANFrame(1, &Ext, &ID, &Length, &DataBuf);
			if(ret){
				if(ID == 0x100){
					memcpy(&SignalArray[0], DataBuf, 8)
				}
				if(ID == 0x101){
					memcpy(&SignalArray[8], DataBuf, 8)
				}
				if(ID == 0x102){
					memcpy(&SignalArray[16], DataBuf, 8)
				}
				if(ID == 0x103){
					memcpy(&SignalArray[24], DataBuf, 8)
				}
				if(ID == 0x104){
					memcpy(&SignalArray[32], DataBuf, 8)
				}
			}
			
		}while(ret && (i <= 100))
	}
	
//省略若干行	
}
  • 73
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 85
    评论
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Cssust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值