CAN信号值解析

CAN信号值解析 — 算法文字描述

以下是算法实现

/*************************************************************
函数名称: can_sig_analy 
函数功能: CAN信号值解析函数
输入参数: 
          u8_sig_start 信号起始位 
          u8_len       信号数据长度
          U8_T data[8] 8个字节的CAN数据  
输出参数: 无
返回值  :无
**************************************************************/
U32_T can_sig_analy(U8_T u8_sig_start, U8_T u8_len,U8_T data[8])
{
    U8_T  lsbbit  = 0;//LSB所在bit位
    U8_T  lsbbyte = 0;//低字节所在位置
    U8_T  msbbyte = 0;//高字节所在位置
    U8_T  start = 0;//起始位置
    U8_T  length = 0;//信号长度
	U8_T  index = 0; 
	U32_T data_merge = 0,data_value = 0;
	
	start = u8_sig_start;//信号起始位
	length = u8_len;//信号有效数据长度
	   
	lsbbit = start & 7;//获取LSB所在bit位
	lsbbyte = start >> 3;//获取低字节所在位置
	
	msbbyte = lsbbyte - ((lsbbit + length - 1) >> 3);//获取高字节所在位置
	
	//合并高低字节数据  
	for(index = msbbyte;index < (lsbbyte+1) ;index++ )
	{
		data_merge  += data[index] << (( lsbbyte - index ) << 3);
	}
	data_value = data_merge >> lsbbit;//去尾
	data_value = data_value & ((1 << length) - 1);//按位与(只保留有效数据)
		
	return data_value;
} 

猜你喜欢

转载自blog.csdn.net/u014783785/article/details/106112054