基于autosar协议栈的pdu缓存方法

文档序号:7667983阅读:342来源:国知局
专利名称:基于autosar协议栈的pdu缓存方法
技术领域
本发明涉及智能汽车的通信领域,具体涉及一种基于AUT0SAR协议栈的PDU缓存方法。
背景技术
AUT0SAR(汽车开放系统架构)是一个开放和标准化的汽车电子软件架构,它是由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立。在汽车电子网络中,各种ECU (Electronic Control Unit,电子控制单元)就是网络上的节点。AUT0SAR协议栈用于汽车电子的ECU内部和ECU之间的网络通讯,它是一个类似于OSI七层模型的协议栈。AUT0SAR协议栈的上层为运行时层(Run Time Environment Layer,RTE层),下层为底层硬件,底层硬件基于CAN (Control Ier Area Network)协议实现。在发送消息的时候, 信息由运行时层传入到协议栈,在栈中被打包成数据帧,然后传入到底层硬件,再由底层硬件发送到网络上的其他节点;在接收消息的时候,通过底层硬件接收到数据帧并将数据帧还原成原来的信息。协议栈分为四层,从上到下依次是通信层(Communication层)、路由层(PDU Router层)、CAN接口层(CAN Interface层)和CAN驱动层(CAN Driver层),协议栈的四个层之间均采用PDU(ftx)t0C0l Data Unit,协议数据单元)进行传输,PDU是整个协议栈里面的数据传输单位。如图1所示,现有技术协议栈的每一层都有发送缓存和接收缓存,在往下发送的时候,每一层都先将上层接收的数据存到当前层的发送缓存中,最后由底层硬件将数据发送到网络上,接收过程则恰好相反。通信层是交互层,负责与协议栈上层通讯。在发送过程中,通信层接收上面运行时层的信号,然后将信号(Signal)打包成PDU,再往下传输PDU ;在接收的时候,将从下层接收到的PDU拆开成信号(Signal)然后传输给上层。其中。路由层是网络层,用于负责引导PDU的目的节点。传递PDU的目的地可能并不是当前节点,而是网络中的其他节点,这时候就需要在这一层将这个PDU从接收缓存转移到发送缓存,并且往下发送传递到网络上的其他节点。接口层是传输层,用于抽象底层驱动层的操作。接口层有一个特殊的挂起缓存(pending buffer)。如果底层硬件的发送缓存已经满了,而这时候该层的发送缓存又从上层接收到了一个PDU,这时候会将这个PDU暂时存到这个挂起缓存。 等到硬件缓存有空闲位置时候,再将挂起缓存中的PDU转移到发送缓存,然后往下发送。驱动层位于协议栈的最底层,直接与底层硬件通讯。它按照CAN协议的标准负责将发送缓存中的PDU打包成CAN帧,然后发送到底层硬件上。由于协议栈的分层机制,层与层之间的任务都是相互独立的,当每个PDU在往下传输的过程中,在每一层都有一个独立的ID,这个ID不一定与上层的ID相同。每次往下传输一层,都要通过某种映射机制,将这个PDU在上层的ID转换成下层的ID。并且与一般的网络分层结构(比如TCP/IP)不同的是,当PDU在往下传输的过程中,不需要添加报头(在 TCP/IP的网络协议栈中,PDU往下传输可能要添加一些信息,比如波特率等等),在汽车网络中,网络节点数量比较少,环境也比较固定,PDU的一些特性都是静态配置好的,不需要添加在报头中。所以就没有报头,真正在网络中传输的也就只有ID和PDU的内容。但是,在从上层往下层的传输过程中,PDU的内容并没有发生变化,只是ID发生变化,PDU只是在重复拷贝,这种操作不仅降低了效率,而且降低了内存利用率。

发明内容
本发明要解决的技术问题是针对上述现有技术的缺陷,提供一种内存利用率高、 内存使用效率高、数据收发效率高的基于AUT0SAR协议栈的PDU缓存方法。为了解决上述技术问题,本发明采用的而技术方案为一种基于AUT0SAR协议栈的PDU缓存方法,其实施步骤如下1)建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存;2)通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用缓存中、CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用缓存中,协议栈的相邻层之间在发送PDU时,由发送方向接收方发送消息,接收方收到消息后从公用缓存中读取PDU并将其修改为具有接收方ID信息的PDU。作为本发明技术方案的进一步改进所述步骤1)中建立公用缓存时包括建立公用发送缓存和公用接收缓存,所述步骤2)中通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用发送缓存中,CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用接收缓存中;协议栈的相邻层之间在往下发送PDU时,接收方收到消息后从公用发送缓存中读取PDU,协议栈的相邻层之间在网上发送PDU时,接收方收到消息后从公用接收缓存中读取PDU并将其修改为具有接收方ID信息的PDU。所述步骤2)中当路由层收到CAN接口层发送消息后,首先判断该消息对应PDU的发送目标,如果发送目标并非当前节点,则将PDU从公用接收缓存转移至公用发送缓存中, 然后通过CAN接口层、CAN驱动层将该PDU发送至发送目标。所述步骤幻中CAN接口层在往CAN驱动层发送数据时,如果底层硬件的发送缓存已满则在当前周期内不进行任何处理,如果底层硬件的发送缓存未满,则将公用发送缓存中的PDU发送至CAN网络上,然后在公用发送缓存中清除该PDU。本发明具有下述优点1、本发明通过建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存,原有四个层的独立缓存以及CAN接口层的挂起缓存被合并到一个公用缓存,由于一个PDU在协议栈中传输时仅仅有一份在公用缓存中,因此可以有效地节省了内用的使用,提高了内存的使用率和效率。2、本发明通过建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存,因此在将PDU从协议栈的CAN驱动层到通信层之间进行传输时,各层都是直接对公用缓存的PDU进行操作,不需要拷贝操作,节省了拷贝PDU花费的时间,有效提高了数据传输的效率。


图1为现有技术协议栈收发数据的缓存方法示意图。图2为本发明实施例中收发PDU的流程示意图。图3为本发明实施例中发送PDU的流程示意图。图4为本发明实施例中接收PDU的流程示意图。图5为现有技术接收非本节点PDU的流程示意图。图6为本发明实施例中接收非本节点PDU的流程示意图。图7为本发明实施例中测试装置的结构示意图。图8为本发明实施例的对比测试性能示意图。
具体实施例方式如图2所示,本发明实施例的基于AUT0SAR协议栈的PDU缓存方法的实施步骤如下1)建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存;2)通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用缓存中、CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用缓存中,协议栈的相邻层之间在发送PDU时,由发送方向接收方发送消息,接收方收到消息后从公用缓存中读取PDU并将其修改为具有接收方ID信息的PDU。步骤1)中建立公用缓存时包括建立公用发送缓存和公用接收缓存,步骤2)中通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用发送缓存中,CAN 驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用接收缓存中;协议栈的相邻层之间在往下发送PDU时,接收方收到消息后从公用发送缓存中读取PDU,协议栈的相邻层之间在网上发送PDU时,接收方收到消息后从公用接收缓存中读取 PDU并将其修改为具有接收方ID信息的PDU。通过将公用缓存进行细分,从而将发送的PDU、 接收的PDU在公用缓存中形成队列结构,有利于对公用缓存的统一管理,从而可以提高对缓存的管理效率。步骤幻中CAN接口层在往CAN驱动层发送数据时,如果底层硬件的发送缓存已满则在当前周期内不进行任何处理,如果底层硬件的发送缓存未满,则将公用发送缓存中的 PDU发送至CAN网络上,然后在公用发送缓存中清除该PDU。在底层硬件的发送缓存繁忙时,PDU不需要移到挂起缓存,在当前周期内不进行任何处理;在底层硬件的发送缓存闲下来以后PDU能发送的时候也不需要拷贝回来。只不过在发送成功的时候,需要将发送成功或者发送失败的PDU占用的公用缓存位置设置为空,以便后面到来的PDU的存放,这样也不需要有任何的数据拷贝。所以内存利用率和效率都得到了提高,足见该方法的性能优化是比较明显的。本实施例中,公用发送缓存和公用接收缓存通过定义一个特殊的无效值(invalid value)代表缓存中的一个空的位置。当系统启动的时候,公用发送缓存和公用接收缓存中的所有位置都被初始化为这个值。如图3所示,本发明实施例发送PDU的流程如下1)通信层接收RTE层信号,然后将信号打包成PDU放在公共发送缓存,发送消息交
由下层处理。2)路由层将公共缓存中的PDU的ID转换成本层的ID,然后发送消息交由下层处理。3) CAN接口层调用CAN驱动层提供的回调函数将PDU发送到CAN网络上。传统方法在发送PDU时,当CAN接口层调用CAN驱动层提供的回调函数往下发送帧时,返回值有三个“ok”,“fail”或“busy”,“ok”代表发送成功,“fail”代表发送失败,在这两种情况下,CAN驱动层都会将PDU在发送缓存中占用的位置设置为无效值。当返回值为 “busy”时,那么PDU会暂时被转移到一个挂起缓存中。每当有帧发送成功时,那么CAN接口层就会检查挂起缓存中是否有PDU,如果有,那么就将PDU从挂起缓存转移到发送缓存,然后往下发送,因此一旦挂起也需要多次拷贝数据。本实施例中,通过将挂起缓存也合并到公共发送缓存中去。这样,当返回值为“busy”时,我们不需要将PDU拷贝到挂起缓存,因为挂起缓存和发送缓存本来就是同一个,这样省略了一次数据移动。当硬件不忙的时候,PDU也不用从挂起缓存转移到发送缓存,直接往下发送就行了,这样又省略了一次数据移动。4)在CAN驱动层提供给CAN接口层的回调函数中将PDU转化成CAN帧。然后判断硬件缓存是否已满,当硬件缓存已满则不进行处理;如果硬件缓存是否未满,将CAN帧放在硬件缓存上,由微控制器将CAN帧发送出去,再将公共发送缓存中PDU占的位置设置为无效值,然后判断公共发送缓存里是否还有CAN帧,如果还有则继续发送,否则退出。步骤2)中当路由层收到CAN接口层发送消息后,首先判断该消息对应PDU的发送目标,如果发送目标并非当前节点,则将PDU从公用接收缓存转移至公用发送缓存中,然后通过CAN接口层、CAN驱动层将该PDU发送至发送目标。如图4所示,本发明实施例接收PDU的流程如下1) CAN驱动层收到总线上发来的CAN帧,转换成PDU并放到公共接收缓存,然后发送消息通知CAN接口层。2) CAN接口层发送消息通知路由层。3)路由层检查PDU发送目标是否本节点如果发送目标否本节点,则发送消息通知通信层,通信层将PDU的ID进行转换,然后拆开成信号传输给RTE层。如果发送目标不是本节点,则将该PDU从公共接收缓存转移到公共发送缓存,然后往下发送。将PDU在公共接收缓存中的占用的位置设为无效值。如果发送目标是当前节点,传统的收发数据缓存方法发送或者接收一份CAN帧需要经过3次 PDU拷贝CAN接口层和CAN驱动层之间一次、路由层和CAN接口层之间一次,通信层和路由层之间一次;如图5所示,如果发送目标并非当前节点,传统的收发数据缓存方法发送或者接收一份CAN帧需要经过5次PDU拷贝PDU从CAN驱动层的接收缓存拷贝到路由层的接收缓存,然后又从路由层的接收缓存拷贝到路由层的发送缓存,再从路由层的发送缓存拷贝到CAN驱动层的发送缓存。如图6所示,本发明实施例通过公用缓存,不论发送目标是否当前节点,发送或者接收一份CAN帧都不需要进行PDU拷贝,有效地减少了硬件1/0,提高了数据收发的效率。如图7所示,开发者将程序写在PC机上,然后将程序下载到HCS12开发板上,CAN 帧通过网线从开发板传输到CAN的双路分析仪上,然后帧被转化为USB信号并且通过USB 线发送到PC机上。通过这种方式,从通讯栈中传出的PDU就会很清晰地显示在PC机上。型号为LA4000的逻辑分析仪从开发板上的引脚接收信号,并且通过软件接口通知PC机,这样就能测算出CAN帧在栈中传输的时间。
假设在CAN帧传输的过程中,发送缓存里面装载的帧的数量最多为10*MPDU,那么优化之前的配置如下表所示
权利要求
1.一种基于AUT0SAR协议栈的PDU缓存方法,其特征在于其实施步骤如下1)建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存;2)通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用缓存中、 CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用缓存中,协议栈的相邻层之间在发送PDU时,由发送方向接收方发送消息,接收方收到消息后从公用缓存中读取PDU并将其修改为具有接收方ID信息的PDU。
2.根据权利要求1所述的基于AUT0SAR协议栈的PDU缓存方法,其特征在于所述步骤1)中建立公用缓存时包括建立公用发送缓存和公用接收缓存,所述步骤幻中通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用发送缓存中,CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用接收缓存中;协议栈的相邻层之间在往下发送PDU时,接收方收到消息后从公用发送缓存中读取PDU,协议栈的相邻层之间在网上发送PDU时,接收方收到消息后从公用接收缓存中读取PDU并将其修改为具有接收方ID信息的PDU。
3.根据权利要求2所述的基于AUT0SAR协议栈的PDU缓存方法,其特征在于所述步骤2)中当路由层收到CAN接口层发送消息后,首先判断该消息对应PDU的发送目标,如果发送目标并非当前节点,则将PDU从公用接收缓存转移至公用发送缓存中,然后通过CAN接口层、CAN驱动层将该PDU发送至发送目标。
4.根据权利要求2或3所述的基于AUT0SAR协议栈的PDU缓存方法,其特征在于所述步骤幻中CAN接口层在往CAN驱动层发送数据时,如果底层硬件的发送缓存已满则在当前周期内不进行任何处理,如果底层硬件的发送缓存未满,则将公用发送缓存中的PDU发送至CAN网络上,然后在公用发送缓存中清除该PDU。
全文摘要
本发明公开了一种基于AUTOSAR协议栈的PDU缓存方法,其实施步骤如下1)建立协议栈的通信层、路由层、CAN接口层和CAN驱动层均可访问的公用缓存;2)通信层收到上层信号后将其打包成带有通信层ID信息的PDU并缓存至公用缓存中、CAN驱动层收到CAN数据帧后将其转换为带有CAN驱动层ID信息的PDU并缓存至公用缓存中,协议栈的相邻层之间在发送PDU时,由发送方向接收方发送消息,接收方收到消息后从公用缓存中读取PDU并将其修改为具有接收方ID信息的PDU。本发明具有内存利用率高、内存使用效率高、数据收发效率高的优点。
文档编号H04L12/56GK102170478SQ201110126388
公开日2011年8月31日 申请日期2011年5月16日 优先权日2011年5月16日
发明者姚刘杰, 杨国青, 王铸, 章明, 顾宗华 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1