一种CAN网关设备及报文路由方法、可读存储介质与流程
- 国知局
- 2024-08-02 12:40:40
本发明车载总线与车内通信/can总线,具体涉及一种can网关设备及报文路由方法、可读存储介质。
背景技术:
1、在车辆车载总线与车内进行通信的方案中,一般通过can总线进行通信传输。在现有技术网关报文进行路由传输时,一般当can controller(硬件层,can控制模块)上接收到报文时候,会触发接收中断,在接收中断中通过通知函数canif_rxindicaiton向canif传递接收到的报文数据,然后再通过通知函数pdur_canifrxindicaiton向pdur(protocol dataunit router,协议数据单元路由器)传递接收到的报文数据。
2、在pdur中查询路由路径,通过调用canif_transmit将数据发送至canif模块(controller area network interface,一种用于控制器区域网络的接口模块),然后canif再将数据通过调用can_write将数据写入can driver(can驱动模块)的发送队列中,然后接下来的工作由can driver硬件自动处理。如果发送队列中只有刚刚接收到的1条报文,则立即将报文发送至can controller;如果发送队列中有多条报文,则can driver会按照报文id优先级顺序将报文发送至can controller,如果报文id优先级相同,则按照报文在队列中的顺序发送(不是报文进入队列的时间顺序),具体见图1所示。
3、然而,当发送总线负荷率较大,路由报文的接收也极其频繁的极端工况下,会出现路由发送报文乱序的情况。具体请见图2所示,在图2中,pdu0_3为在网络编号net0接收的报文,代表报文名称pdu0,序列号为3,该报文会同时路由至网络编号net1和net2,其中,由于net1的can driver发送队列中原先为空,在接收到pdu0_3后不需要等待会立即发出,这是正常情况;而net2的can driver发送队列中原先处于填满的状态,有一条高优先级报文pdu1,以及低优先级报文pdu0_1,pdu_2;pdu1会优先发出,然后pdu0_3继续被canif写入candriver发送队列,且填充至pdu1空出来的位置,此时队列中的三条报文优先级相同,candriver按照报文在队列中的位置顺序发出,即pdu0_3→pdu0_1→pdu0_2,最终表现为pdu0的报文路由出现了乱序的现象。
4、因此,有必要针对报文路由在报文接收频繁会出现报文乱序的问题进行解决。
技术实现思路
1、有鉴于此,有必要提供一种can网关设备及报文路由方法、可读存储介质,用以解决现有技术中当发送总线负荷率较大而导致路由报文接收极其频繁,进而会出现路由发送报文乱序的技术问题。
2、第一方面,为了解决上述技术问题,本发明提供了一种can网关设备,包括:can控制模块、can驱动模块、can接口模块,所述can控制模块、can驱动模块以及can接口模块依次通信连接;
3、所述can网关设备还包括:
4、与所述can接口模块通信连接的内容分发网络路由模块,其配置有与路由路径数量相对应的先进先出存储模块;
5、所述内容分发网络路由模块用于接收当前报文数据,将所述当前报文数据缓存至当前路由路径对应的先进先出存储模块中,并将所述当前报文数据按照先进先出的原则进行发送。
6、在一种可能的实现方式中,所述内容分发网络路由模块包括报文数据写入模块和报文数据发送模块;
7、所述报文数据写入模块,用于查询所述当前报文数据对应的当前路由路径,并将所述当前报文数据写入到所述当前路由路径相对应的先进先出存储模块的当前写入位置中;
8、所述报文数据发送模块,用于在所述当前写入位置的上一个位置的报文数据已发送完成的情况下,将所述当前报文数据进行发送。
9、第二方面,为了解决上述技术问题,本发明还提供了一种报文路由方法,应用于上述的can网关设备,所述方法包括:
10、接收当前报文数据,将所述当前报文数据缓存至当前路由路径对应的先进先出存储模块中,并将所述当前报文数据按照先进先出的原则进行发送。
11、在一种可能的实现方式中,所述接收当前报文数据,包括:
12、当所述can控制模块接收所述当前报文数据后,触发接收中断给所述can驱动模块;
13、在接收中断中所述can驱动模块通过第一通知函数向所述can接口模块传递所述当前报文数据;
14、所述can接口模块通过第二通知函数传递所述当前报文数据给所述内容分发网络路由模块。
15、在一种可能的实现方式中,所述将所述当前报文数据缓存至当前路由路径对应的先进先出存储模块中,包括:
16、所述内容分发网络路由模块查询所述当前报文数据对应的当前路由路径,将所述当前报文数据写入到所述当前路由路径相对应的先进先出存储模块的当前写入位置中,同时将所述先进先出存储模块的写指针加一。
17、在一种可能的实现方式中,所述将所述当前报文数据写入到所述当前路由路径相对应的先进先出存储模块的当前写入位置中,同时将所述先进先出存储模块的写指针加一,之后还包括:
18、判断所述先进先出存储模块是否被数据填满,若是,则将所述当前报文数据覆盖最旧的数据,将所述先进先出存储模块的写满标志位置为真,且将所述先进先出存储模块的读指针加一,并指向暂时未被读取的旧数据;
19、若否,则不做处理。
20、在一种可能的实现方式中,所述将所述当前报文数据缓存至当前路由路径对应的先进先出存储模块中,之后还包括:
21、判断当前写入位置的上一个位置的报文数据是否发送完成;
22、如果发送完成,则先将所述先进先出存储模块的读指针加一,指向下一个待读取的位置,调用第一传输函数将当前写入位置的当前报文数据传输给所述can接口模块,同时记录所述当前报文数据的路由路径编号;
23、如果未发送完成,则所述第一传输函数返回,所述当前报文数据暂时缓存在先进先出存储模块中。
24、在一种可能的实现方式中,将所述当前报文数据按照先进先出的原则进行发送,包括:
25、当所述can接口模块接收到所述当前报文数据后,将所述当前报文数据传输给所述can驱动模块,所述can驱动模块在将所述当前报文数据传输给所述can控制模块;
26、当所述can控制模块接收到所述当前报文数据后触发发送中断给所述can驱动模块,所述can驱动模块通过第三通知函数通知所述can接口模块,所述can接口模块通过第四通知函数通知所述内容分发网络路由模块;
27、所述内容分发网络路由模块根据所述当前报文数据编号和所述路由路径编号查询所述当前报文数据和路由路径信息,根据所述当前报文数据和路由路径信息将所述先进先出存储模块中的上一个读指针指向的位置的发送完成标志位设为真。
28、在一种可能的实现方式中,还包括:
29、所述内容分发网络路由模块查询所述先进先出存储模块中是否存在待发送的报文数据,若是,则将所述先进先出存储模块的读指针加一,指向下一个待读取的位置。
30、第三方面,本发明还提供了一种车载终端,包括存储器和处理器,其中,
31、所述存储器,用于存储程序;
32、所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以实现上述任意一种可能的实现方式中的报文路由方法中的步骤。
33、第四方面,本发明还提供了一种计算机可读存储介质,所述可读存储介质上存储有程序或指令,所述程序或指令被处理器执行时以实现上述任意一种可能的实现方式中所述的报文路由方法中的步骤。
34、本发明的有益效果是:本发明提供的can网关设备,将路由报文不再通过原先的pdur(protocol data unit router,协议数据单元路由器)进行处理,而是通过新创建的cdd rout(complex driver router,内容分发网络路由模块)处理。通过在cdd rout层中为每一条接收报文的每一个路由路径均配置了一定大小的fifo(first input firstoutput,先进先出存储模块),当在接收网络上收到报文时,cdd rout层会先将接收到的报文数据存放在所有路由路径对应的fifo中,然后逐个fifo判断上一条报文数据是否发送完成,如果没有发送完成,则先将数据缓存在fifo中;如果已经发送完成,则立即将当前的报文数据发送出去。当报文数据发送完成后,在发送中断中进一步对缓存在fifo中的待发送数据做发送处理。本发明确保了在任意时刻硬件层(can controller,can控制模块)的发送队列中同一个id的报文数据只有一个,避免了在极端工况下路由发送报文乱序情况的发生。
本文地址:https://www.jishuxx.com/zhuanli/20240802/237278.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表