CAN报文滤波解析方法、系统及电子控制单元技术方案

技术编号:16974605 阅读:55 留言:0更新日期:2018-01-07 09:33
本发明专利技术公开了CAN报文滤波解析方法、系统及电子控制单元,将RAM_CODE_SEG代码段对应的FLASH空间中的程序复制到对应的RAM空间中,当MCU运行CAN报文接收、滤波和解析函数时,程序计数器自动指向RAM_CODE_SEG所在的RAM空间,在RAM内运行所述程序;在RAM中执行CAN报文接收、滤波和解析函数,不仅能够降低中断服务程序的运行时间,还可以降低对系统堆栈的要求,同时提出一种报文ID匹配算法,将报文ID匹配算法放在中断服务程序中进行,降低了报文接收缓冲区和CAN报文解析任务消息队列对RAM资源的要求。

【技术实现步骤摘要】
CAN报文滤波解析方法、系统及电子控制单元
本专利技术涉及汽车电子
,特别是涉及CAN报文滤波解析方法、系统及电子控制单元。
技术介绍
随着汽车技术的升级和功能的日益丰富,汽车电子系统CAN网络的报文越来越多,对于网络中的具体CAN节点而言,会接收到大量无用的报文。由于CAN控制器硬件滤波功能有限,当CAN节点需要接收并解析多个报文时,便无法使用硬件滤波功能,目前一般采用软件滤波过滤掉无用报文,当CAN网络达到一定负载率时,频繁的报文接收、滤波和解析会极大地消耗MCU负荷。另一方面,汽车电子控制单元(ECU)的程序通常存储在非易失性存储器FLASH中,程序运行时,MCU从程序计数器指向的地址处读取指令。由于MCU内部RAM资源有限,程序一般在FLASH中运行,FLASH技术的限制决定了其读取速度远小于RAM读取速度,相应地,在FLASH中运行程序的速度远小于在RAM中运行程序的速度。通过软件方式进行报文接收、滤波和解析时,ECU需要消耗大量的RAM资源、指令周期和时间处理这些任务,不仅影响系统实时性,还会对MCU规格提出一定要求。通过软件滤波过滤无用报文,有两种实现方式:1、设置足够大的CAN报文接收缓冲区,并为CAN报文解析任务设置足够大的消息队列,在CAN报文接收中断服务程序中把报文依次存储到缓冲区中,然后向CAN报文解析任务发送消息,在CAN报文解析任务中过滤无用报文,解析有用报文。2、设置一定大小的CAN报文接收缓冲区,在CAN报文接收中断服务程序中过滤掉无用报文,将有用报文存储到缓冲区中,然后向CAN报文解析任务发送消息,在CAN报文解析任务中解析有用报文。采用第一种实现方式时,如果CAN网络存在大量本节点不需要解析的无用报文,需要将报文接收缓冲区和CAN报文解析任务消息队列设置得足够大,否则可能出现缓冲区溢出或者消息队列溢出,造成报文丢失的严重错误。较大的接收缓冲区和报文解析任务消息队列会消耗大量RAM资源,可能需要更换RAM更大同时也更昂贵的MCU,从而增加电子零部件的成本。采用第二种实现方式时,需要在接收中断服务程序中进行软件滤波,采用遍历比较方法过滤报文,需要大量的指令周期,违反了中断服务程序运行时间越短越好的原则。执行中断服务程序期间再次发生中断可能会导致中断嵌套或中断丢失,中断嵌套会大量消耗有限的堆栈资源,如果堆栈溢出,会导致不可预料的后果。中断丢失也会影响系统运行的准确性和可靠性。遍历比较法是指设置一个常数数组,数组元素为需要解析的报文ID,将接收到的报文ID和数组元素逐一进行比较,如果接收到的报文ID和某个数组元素相等,则表示CAN节点需要解析这个报文。中国专利技术专利:CAN总线报文的软件滤波方法、系统及电子控制单元(申请号:201410058072.1),描述了一种CAN总线报文的软件滤波方法,该专利技术设置了若干个接收缓冲区,每个缓冲区中存储的报文ID为若干个固定取值,首先把报文存储到某个缓冲区中,然后将报文ID和该缓冲区对应的若干个固定ID进行比较。该方法可以减少ID比较次数,但需要设置若干个接收缓冲区,不仅程序设计比较复杂,而且接收缓冲区内存储的是滤波之前的CAN报文,需要消耗的RAM资源比较多。而且,该专利技术专利没有说明,是在接收中断服务程序还是在报文解析任务中进行软件滤波。
技术实现思路
为了解决现有技术的不足,本专利技术提供了一种CAN报文滤波解析方法,其在RAM中执行CAN报文接收、滤波和解析函数,不仅能够降低中断服务程序的运行时间,还可以降低对系统堆栈的要求,同时提出一种报文ID匹配算法,将报文ID匹配算法放在中断服务程序中进行,降低了报文接收缓冲区和CAN报文解析任务消息队列对RAM资源的要求;一种CAN报文滤波解析方法,应用于电子控制单元,包括步骤如下:步骤(1):在电子控制单元ECU上电或者复位后的初始化阶段,将RAM_CODE_SEG代码段对应的FLASH空间中的程序复制到对应的RAM空间中,当MCU运行CAN报文接收、滤波和解析函数时,程序计数器自动指向RAM_CODE_SEG所在的RAM空间,在RAM内运行所述程序;步骤(2):确定需要解析的有效报文ID和个数,个数记为VALID_NUM,建立有效报文ID取值数组Valid_id[VALID_NUM];步骤(3):将CAN标准帧ID取值区间划分为8个子区间;步骤(4):以数组下标的形式确定各个子区间内有效报文ID在Valid_id[VALID_NUM]中的起始位置;建立数组Id_idx[9],以Id_idx[i]为i号子区间最小有效报文ID对应的Valid_id[VALID_NUM]数组元素的下标值,Id_idx[8]=VALID_NUM;步骤(5):在CAN报文接收中断服务程序中,判断接收到的报文的ID是否在有效报文ID取值数组Valid_id[VALID_NUM]范围内,如果不是,则直接退出接收中断服务程序,否则进入步骤(6);步骤(6):将接收到的报文的ID右移8位,将结果记为idx;步骤(7):以Id_idx[idx]和Id_idx[idx+1]-1作为有效报文ID取值数组Valid_id[VALID_NUM]的下标区间,将接收到的报文的ID和下标区间内的ID取值逐一进行比较,如果接收到的报文的ID和所述下标区间内任何一个ID取值都不相等,则丢弃收到的报文,直接退出接收中断处理程序,否则进入步骤(8);步骤(8):将报文ID、所在ID取值子区间的标号、报文长度、报文数据存储在报文接收缓冲区中,向报文解析任务发送“接收到新报文”消息;步骤(9):在报文解析任务中,根据ID取值子区间的标号,将报文ID与所述取值子区间中的ID进行比较,提取相应的CAN信号,执行相关的操作。所述步骤(1)的RAM_CODE_SEG代码段,设置在链接文件中,是可重定位的代码段;RAM_CODE_SEG代码段中定义CAN报文接收、滤波和解析函数;将程序编译、链接后,烧录程序时,MCU把定义在RAM_CODE_SEG代码段中的程序数据存储到FLASH空间;所述可重定位的代码段中设定一段FLASH空间和一段与FLASH空间尺寸相同的RAM空间,并将FLASH空间重定位到RAM空间。所述步骤(2)中,根据ECU的技术规范和CAN网络矩阵表,确定需要解析的有效报文ID和个数;所述步骤(2)中按需要解析的有效报文ID取值从小到大的顺序建立有效报文ID取值数组Valid_id[VALID_NUM],最小值为Valid_id[0],最大值为Valid_id[VALID_NUM-1]。所述步骤(2)中,VALID_NUM和Valid_id[VALID_NUM]均为常量,由技术规范和CAN网络矩阵表分析得出。所述步骤(3)中,CAN标准帧ID为11位,取值范围为0x00-0x7ff,将CAN标准帧ID取值区间划分为8个子区间;8个子区间的ID取值范围分别为0x00-0xff、0x100-0x1ff、0x200-0x2ff、0x300-0x3ff、0x400-0x4ff、0x500-0x5ff、0x600-0x6ff和0x700-0x7ff,对应子区间标号分别为0、1、2、3、4、5、6和7。所述步骤(4)中,根据ECU的技术规范和CA本文档来自技高网
...
CAN报文滤波解析方法、系统及电子控制单元

【技术保护点】
一种CAN报文滤波解析方法,其特征是,应用于电子控制单元,包括步骤如下:步骤(1):在电子控制单元ECU上电或者复位后的初始化阶段,将RAM_CODE_SEG代码段对应的FLASH空间中的程序复制到对应的RAM空间中,当MCU运行CAN报文接收、滤波和解析函数时,程序计数器自动指向RAM_CODE_SEG所在的RAM空间,在RAM内运行所述程序;步骤(2):确定需要解析的有效报文ID和个数,个数记为VALID_NUM,建立有效报文ID取值数组Valid_id[VALID_NUM];步骤(3):将CAN标准帧ID取值区间划分为8个子区间;步骤(4):以数组下标的形式确定各个子区间内有效报文ID在Valid_id[VALID_NUM]中的起始位置;建立数组Id_idx[9],以Id_idx[i]为i号子区间最小有效报文ID对应的Valid_id[VALID_NUM]数组元素的下标值,Id_idx[8]=VALID_NUM;步骤(5):在CAN报文接收中断服务程序中,判断接收到的报文的ID是否在有效报文ID取值数组Valid_id[VALID_NUM]范围内,如果不是,则直接退出接收中断服务程序,否则进入步骤(6);步骤(6):将接收到的报文的ID右移8位,将结果记为idx;步骤(7):以Id_idx[idx]和Id_idx[idx+1]‑1作为有效报文ID取值数组Valid_id[VALID_NUM]的下标区间,将接收到的报文的ID和下标区间内的ID取值逐一进行比较,如果接收到的报文的ID和所述下标区间内任何一个ID取值都不相等,则丢弃收到的报文,直接退出接收中断处理程序,否则进入步骤(8);步骤(8):将报文ID、所在ID取值子区间的标号、报文长度、报文数据存储在报文接收缓冲区中,向报文解析任务发送“接收到新报文”消息;步骤(9):在报文解析任务中,根据ID取值子区间的标号,将报文ID与所述取值子区间中的ID进行比较,提取相应的CAN信号,执行相关的操作。...

【技术特征摘要】
1.一种CAN报文滤波解析方法,其特征是,应用于电子控制单元,包括步骤如下:步骤(1):在电子控制单元ECU上电或者复位后的初始化阶段,将RAM_CODE_SEG代码段对应的FLASH空间中的程序复制到对应的RAM空间中,当MCU运行CAN报文接收、滤波和解析函数时,程序计数器自动指向RAM_CODE_SEG所在的RAM空间,在RAM内运行所述程序;步骤(2):确定需要解析的有效报文ID和个数,个数记为VALID_NUM,建立有效报文ID取值数组Valid_id[VALID_NUM];步骤(3):将CAN标准帧ID取值区间划分为8个子区间;步骤(4):以数组下标的形式确定各个子区间内有效报文ID在Valid_id[VALID_NUM]中的起始位置;建立数组Id_idx[9],以Id_idx[i]为i号子区间最小有效报文ID对应的Valid_id[VALID_NUM]数组元素的下标值,Id_idx[8]=VALID_NUM;步骤(5):在CAN报文接收中断服务程序中,判断接收到的报文的ID是否在有效报文ID取值数组Valid_id[VALID_NUM]范围内,如果不是,则直接退出接收中断服务程序,否则进入步骤(6);步骤(6):将接收到的报文的ID右移8位,将结果记为idx;步骤(7):以Id_idx[idx]和Id_idx[idx+1]-1作为有效报文ID取值数组Valid_id[VALID_NUM]的下标区间,将接收到的报文的ID和下标区间内的ID取值逐一进行比较,如果接收到的报文的ID和所述下标区间内任何一个ID取值都不相等,则丢弃收到的报文,直接退出接收中断处理程序,否则进入步骤(8);步骤(8):将报文ID、所在ID取值子区间的标号、报文长度、报文数据存储在报文接收缓冲区中,向报文解析任务发送“接收到新报文”消息;步骤(9):在报文解析任务中,根据ID取值子区间的标号,将报文ID与所述取值子区间中的ID进行比较,提取相应的CAN信号,执行相关的操作。2.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(1)所述RAM_CODE_SEG代码段,设置在链接文件中,是可重定位的代码段;RAM_CODE_SEG代码段中定义CAN报文接收、滤波和解析函数;将程序编译、链接后,烧录程序时,MCU把定义在RAM_CODE_SEG代码段中的程序数据存储到FLASH空间。3.如权利要求2所述的一种CAN报文滤波解析方法,其特征是,所述可重定位的代码段中设定一段FLASH空间和一段与FLASH空间尺寸相同的RAM空间,并将FLASH空间重定位到RAM空间。4.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(2)中,根据ECU的技术规范和CAN网络矩阵表,确定需要解析的有效报文ID和个数;VALID_NUM和Valid_id[VALID_NUM]均为常量,由技术规范和CAN网络矩阵表分析得出。5.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(2)中按需要解析的有效报文ID取值从小到大的顺序建立有效报文ID取值数组Valid_id[VALID_NUM],最小值为Valid_id[0],最大值为Valid_id[VALID_NUM-1]。6.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(2)中,所述步骤(3)中,CAN标准帧ID为11位,取值范围为0x00-0x7ff,将CAN标准帧ID取值区间划分为8个子区间;8个子区间的ID取值范围分别为0x00-0xff、0x100-0x1ff、0x200-0x2ff、0x300-0x3ff、0x400-0x4ff、0x500-0x5ff、0x600-0x6ff和0x700-0x7ff,对应子区间标号分别为0、1、2、3、4、5、6和7。7.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(4)中,根据ECU的技术规范和CAN网络矩阵表,以数组下标的形式确定各个子区间内有效报文ID在Valid_id[VALID_NUM]中的起始位置。8.如权利要求1所述的一种CAN报文滤波解析方法,其特征是,所述步骤(4)的方法如下:假设本节点需要解析的报文ID取值在0号子区间0x00-0xff之间的有0x40,0x50,0x60,0x70…,一共有n个,ID取值在0x100-0x1ff之间的...

【专利技术属性】
技术研发人员:马建辉王知学侯冬冬郭坤
申请(专利权)人:山东省科学院自动化研究所
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1