CANOE CAPL编程采坑记录---capl中的函数中的变量,默认是静态局部变量

在一个capl文件中,我需要写一个checksum校验的函数,用来在发送报文时给最后一个字节checksum字段赋值,函数大体如下:

byte Send_CheckSum(word msgId, byte data[], byte len) //data为数组,len为数组长度
{ 
	byte i, crc = 0;
	
	crc += msgId & 0xff;
	crc += (msgId >> 8) & 0xff;
	for(i=0; i<len; i++)
	{
		crc += data[i];
	}
	crc = ~crc;
	return crc;
}

代码看起来没啥问题,但是实际发送报文的checksum总是错误的。而且我发现有两个奇怪的现象,一是只有第一帧报文的checksum是对的,后面的全是错误的;二是,就算报文前面的数据没变化,checksum也在变,哈哈哈。

最终我仔细翻看了介绍capl的博客后,才发现里面有介绍,capl中函数内部定义的变量默认是静态的,会保留上一次的值,如果不想用这个特性,必须要显式地初始化,例如在上述代码的第四行加上crc=0;

你可能感兴趣的:(CAN,采坑问题记录,汽车)