本发明专利技术属于车辆通讯的技术领域,具体涉及一种汽车CAN报文收发缓冲方法。本发明专利技术包括:当CAN接收中断服务函数,收到报文进入所述缓冲区管理模块;(1):通过查找索引进行所述结构体数组查找判断报文ID是否为新报文ID,若为新报文ID进入(2),否则进入(3);(2):若判断此报文ID为新报文且缓冲区未满,进入(4)更新报文周期;(3):若判断此报文ID为之前已存过的旧报文,进入(4)更新报文周期;(4):在1S定时器中,计算出报文周期更新到数据缓冲区内。本发明专利技术用于解决现有技术中接收报文和发送报文的速率相差过大且对发送报文的周期性有要求时,容易造成设备卡顿、程序卡死的技术问题。程序卡死的技术问题。程序卡死的技术问题。
【技术实现步骤摘要】
一种汽车CAN报文收发缓冲方法
[0001]本专利技术属于车辆通讯的
,具体涉及一种汽车CAN报文收发缓冲方法。
技术介绍
[0002]随着物联网越来越被重视,手机、微信小程序以及其他手持设备被要求可以解读CAN报文内容,但是随着汽车电子部件的增多和智能化程度的提高,CAN总线系统的负载率越来越高,CAN波特率也越来越快。由于手持设备的性能良莠不齐,在传输过程中需要短时间收发大量报文且速度快,会造成设备卡顿、程序卡死的问题。
[0003]中国专利技术专利:一种CAN报文高负荷率接收方法及系统(申请号:CN202010779668.6)介绍了CAN报文高负荷接收的方法,通过CAN报文过滤、筛选,将CAN报文存到环形队列,这种方法可以解决少量的报文缓冲,但是当接收报文和发送报文的速率相差过大且对发送报文的周期性有要求时,环形队列难以解决。
技术实现思路
[0004]本专利技术要解决的技术问题在于克服现有技术的不足,提供一种汽车CAN报文收发缓冲方法,用于解决现有技术中接收报文和发送报文的速率相差过大且对发送报文的周期性有要求时,容易造成设备卡顿、程序卡死的技术问题。
[0005]本专利技术解决上述技术问题的技术方案如下:一种汽车CAN报文收发缓冲方法,包括:
[0006]缓冲区,所述缓冲区为结构体数组,所述结构体数组包括报文ID、报文内容、报文次数和报文周期;
[0007]缓冲区管理模块,所述缓冲区管理模块用于管理结构体数组以及更新结构体数组内容;
[0008]当CAN接收中断服务函数,收到报文进入所述缓冲区管理模块;
[0009]步骤(1):在所述缓冲区管理模块中,首先通过查找索引进行所述结构体数组查找判断报文ID是否为新报文ID,若为新报文ID进入步骤(2),否则进入步骤(3);
[0010]步骤(2):若判断此报文ID为新报文且缓冲区未满,进入步骤(4)更新报文周期;
[0011]步骤(3):若判断此报文ID为之前已存过的旧报文,进入步骤(4)更新报文周期;
[0012]步骤(4):在1S定时器中,计算前1秒的报文接收到的数量和当前时间接收到的报文数量的差值计算出报文周期更新到数据缓冲区内;
[0013]步骤(5):在计数器中设置发送时间计数值;
[0014]步骤(6):根据发送周期进行报文发送。
[0015]所述结构体数组内的数组元素通过索引进行寻址,所述缓冲区结构体数组还包括两个索引:存入索引和查找索引;
[0016]步骤(101):通过查找索引从0开始,若查找索引和存入索引一致判断为新报文进入步骤(102),否则进入步骤(103);
[0017]步骤(102):读取接收数组中由取出索引标记的数组元素,更新存入索引;
[0018]步骤(103):读取接收数组中由取出索引标记的数组元素,存入索引不变。
[0019]所述步骤(2)识别到为新报文时:
[0020]当存入新报文ID时,判断索引值是否等于数组长度,若索引值小于数组长度,将存入索引加一,将报文ID、报文内容更新,收到的报文次数加一;若索引值等于数组长度,将存入索引置零。
[0021]所述步骤(3)识别到为之前已存过的报文时:
[0022]通过查找索引查找之前存到的报文信息,若CAN接收收到的报文为之前存过的报文ID,则更新报文内容,将报文次数加一。
[0023]所述步骤(5)在计数器中设置报文时间计数值的发送频率为n毫秒一次,n为正整数,进行时间累计;
[0024]并在计数器内设置标志位,所述标志位为时间节点。
[0025]所述步骤(6),可根据报文发送周期进行报文发送,查找所有报文周期,当计数器的时间累计值乘以发送频率后与任意一个报文周期吻合时,发送该报文,开启报文发送中断,当CAN控制器发送成功后,该报文次数减一,时间累计值超过标志位需清零。
[0026]本专利技术的有益效果是:
[0027]1、对接收报文的设备的性能要求较低,可选用CAN控制器硬件缓冲区较小的MCU,降低的使用成本。;
[0028]2、可自定义对报文的发送周期进行放大或者缩小,减少了接收设备的负荷,使用范围更加广泛。
附图说明
[0029]为了更清楚地说明本专利技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0030]图1为本专利技术提供的一种汽车CAN报文收发缓冲方法的流程图;
[0031]图2为本专利技术提供的一种汽车CAN报文收发缓冲方法中接收报文的流程图;
[0032]图3为本专利技术提供的一种汽车CAN报文收发缓冲方法中发送报文的流程图。
具体实施方式
[0033]下面将结合附图对本专利技术技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本专利技术的技术方案,因此只作为示例,而不能以此来限制本专利技术的保护范围。
[0034]需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本专利技术所属领域技术人员所理解的通常意义。
[0035]实施例
[0036]如图1、图2和图3所示,本专利技术所提供的一种汽车CAN报文收发缓冲方法,包括:
[0037]缓冲区,所述缓冲区为结构体数组,所述结构体数组包括报文ID、报文内容、报文
次数和报文周期;
[0038]缓冲区管理模块,所述缓冲区管理模块用于管理结构体数组以及更新结构体数组内容;
[0039]当CAN接收中断服务函数,收到报文进入所述缓冲区管理模块;
[0040]步骤(1):在所述缓冲区管理模块中,首先通过查找索引进行所述结构体数组查找判断报文ID是否为新报文ID,若为新报文ID进入步骤(2),否则进入步骤(3);
[0041]步骤(2):若判断此报文ID为新报文且缓冲区未满,进入步骤(4)更新报文周期;
[0042]步骤(3):若判断此报文ID为之前已存过的旧报文,进入步骤(4)更新报文周期;
[0043]步骤(4):在1S定时器中,计算前1秒的报文接收到的数量和当前时间接收到的报文数量的差值计算出报文周期更新到数据缓冲区内;
[0044]步骤(5):在计数器中设置发送时间计数值;
[0045]步骤(6):根据发送周期进行报文发送。
[0046]所述结构体数组内的数组元素通过索引进行寻址,所述缓冲区结构体数组还包括两个索引:存入索引和查找索引;
[0047]步骤(101):通过查找索引从0开始,若查找索引和存入索引一致判断为新报文进入步骤(102),否则进入步骤(103);
[0048]步骤(102):读取接收数组中由取出索引标记的数组元素,更新存入索引;
[0049]步骤(10本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种汽车CAN报文收发缓冲方法,其特征在于,包括:缓冲区,所述缓冲区为结构体数组,所述结构体数组包括报文ID、报文内容、报文次数和报文周期;缓冲区管理模块,所述缓冲区管理模块用于管理结构体数组以及更新结构体数组内容;当CAN接收中断服务函数,收到报文进入所述缓冲区管理模块;步骤(1):在所述缓冲区管理模块中,首先通过查找索引进行所述结构体数组查找判断报文ID是否为新报文ID,若为新报文ID进入步骤(2),否则进入步骤(3);步骤(2):若判断此报文ID为新报文且缓冲区未满,进入步骤(4)更新报文周期;步骤(3):若判断此报文ID为之前已存过的旧报文,进入步骤(4)更新报文周期;步骤(4):在1S定时器中,计算前1秒的报文接收到的数量和当前时间接收到的报文数量的差值计算出报文周期更新到数据缓冲区内;步骤(5):在计数器中设置发送时间计数值;步骤(6):根据发送周期进行报文发送。2.根据权利要求1所述汽车CAN报文收发缓冲方法,其特征在于,所述结构体数组内的数组元素通过索引进行寻址,所述缓冲区结构体数组还包括两个索引:存入索引和查找索引;步骤(101):通过查找索引从0开始,若查找索引和存入索引一致判断为新报文进入步骤(102),否则进入步骤(103);步骤(102):读取接收数...
【专利技术属性】
技术研发人员:徐希翼,季金强,
申请(专利权)人:扬州亚星客车股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。