AUTOSAR中CAN信号是如何触发COM回调的呢?

在autosar中,com模块提供了两种机制来处理接收到的pdu:comrxpducallout和comnotification
在can驱动中,回调函数通常是通过中断或轮询的方式触发的。当can控制器接收或发送can数据帧时,can控制器会产生相应的中断或状态变化,在中断服务例程(isr)中或轮询循环中,can驱动会调用相应的回调函数来处理这些can事件。
第一种回调,可以按照收到信号的顺序触发com层的回调,因为收到的信号会存在fifo里,这就可以按照顺序触发。
先说结论:当can_mainfunction_read 处理接收到的消息时,canif层将调用pdur层的pdur_canifrxindication 函数。然后,pdur层将该消息路由到com层,并调用com_rxindication 函数。最后,当com层处理接收到的消息时,它将触发配置的回调函数。
为了在接收到can消息时触发com层的回调,需要遵循以下步骤:
配置canif层:确保在canif层为接收到的can消息配置了相应的canifrxpdu。这包括为其指定一个pduid,并将其与期望的can id 和数据长度相关联。
配置pdur层:在pdur层,创建一个路由从canif层到com层。这可以通过在pdur中定义pdurroutingpath并关联canif的pduid 和com层的pduid 来实现。
配置com层:在com层,为接收到的can消息定义一个接收ipdu,并指定一个回调函数。这个回调函数将在接收到新消息时被调用。通常,回调函数在接收到消息后会对其进行处理,例如将数据传输到应用程序。
这种回调是通过com收到can的pduid,遍历一个数组,之后根据返回的数字idx再去遍历回调数组,根据idx来判断要执行哪个回调,这个函数的执行是在 com_rxindication 里执行的。
通过davinci配置可以看出,can controller中rxprocessing是polling模式,那么callout的回调触发是在polling模式下触发;
也就是调用的是下面这两个函数,注意根据配置要区分basic can和full can;
假设,现在进来的信号是通过basic can进来的,在polling模式下,basic can模块是通过轮询can控制器中的接收缓冲区(mailbox)来接收can数据帧,【也就是如果是报文如果在filtermask里的,数据可以通过can传给canif,否则,不管】
在这个过程中,当can控制器接收到一个can数据帧时,can控制器会将can数据帧存储在fifo buffer中。basic can模块在轮询can控制器的接收缓冲区时,会从fifo buffer中读取can数据帧,并将can数据帧中的信号解析出来。解析后的信号将被传递到canif模块中,以便上层模块进行处理。
将接收到的can数据帧解析的信号传递到canif模块;
之后将数据在传到pdur,之后在传到com。
第二种回调,comnotification是一个接口,用于通知上层模块有新的数据到达或数据发送完成。
在代码中可以是通过一个task来循环执行 com_mainfunctionrx 这个任务,com_mainfunctionrx是一个com模块的主任务函数,用于处理接收到的数据。当com_mainfunctionrx函数接收到数据后,可以通过调用comnotification来触发通知事件,通知上层应用程序进行处理。
当数据更新时,com层会检查所有与该数据相关联的comnotification,并将其标记为“待触发”。然后,com层会在稍后的时间点触发已标记为“待触发”的comnotification,并将相关的数据对象id作为参数传递给应用程序。
假设收到的是信号组,遍历所有com收到的信号组,如果信号组的数据完整,就触发comnotification的,进入到下一个处理。
当com接收到一个pdu时,它会根据配置选择是将pdu缓存起来还是直接调用应用程序提供的回调函数。如果选择了缓存,那么pdu将被缓存起来,并等待应用程序调用com_receivesignal或com_receivesignalgroup函数时进行处理;如果选择了直接调用回调函数,则会将pdu的数据传递给应用程序提供的回调函数进行处理。
com_cacheorcallrxdeferredcbkfctptr,用于缓存或调用接收到pdu时的回调函数。
当com接收到一个pdu时,它会根据配置选择是将pdu缓存起来还是直接调用应用程序提供的回调函数。如果选择了缓存,那么回调函数的索引将被缓存起来,并等待应用程序调用com_receivesignal或com_receivesignalgroup函数时进行处理;如果选择了直接调用回调函数,则会将pdu的数据传递给应用程序提供的回调函数进行处理。
对比两种回调:
comrxpducallout的触发顺序可以按照接收到pdu的顺序进行,因为在处理每个pdu时,com模块都会等待应用程序返回处理状态,然后再继续处理下一个pdu。因此,如果应用程序处理pdu的顺序与pdu到达的顺序相同,则comrxpducallout的回调也会按照pdu到达的顺序进行。
comnotification是一种机制,允许应用程序在数据更新事件发生时执行自定义逻辑,并不要求应用程序返回状态值。当com模块检测到数据更新事件时,它会对与更新事件相关联的数据对象注册的comnotification进行回调,并将相关的数据对象id作为参数传递给应用程序。comnotification的触发顺序不能按照接收到pdu的顺序进行,因为在数据更新事件发生时,com模块无法确定哪些数据对象会发生更新以及它们的更新顺序。
举例:
假设有两个节点a和b,它们之间通过can总线进行通信。节点a向节点b发送两个数据对象1和2。首先,节点a发送数据对象1,然后发送数据对象2,节点b按照接收到pdu的顺序先接收到了数据对象1,然后接收到了数据对象2。此时,如果节点b上的应用程序使用comrxpducallout来处理pdu,并且在处理pdu时需要访问其他节点发送的数据对象,那么comrxpducallout的回调顺序将按照节点发送的顺序进行。因此,节点b上的应用程序将按照1->2的顺序处理pdu,并且可以在处理pdu时访问先收到的数据对象1。
相反,如果节点b上的应用程序使用comnotification来处理数据更新事件,并且在处理数据更新事件时需要访问其他节点发送的数据对象,那么comnotification不一定按照节点发送顺序执行。例如,如果数据对象1和2之间存在依赖关系,并且在数据对象2更新前,数据对象1也会发生更新,那么节点2上的应用程序可能会在接收到数据对象2更新事件前先接收到数据对象1的更新事件。因此,节点b上的应用程序不能保证按照节点发送顺序执行,因为更新事件的顺序可能与节点发送顺序不同。
comnotification的接收对象的依存关系是通过comsignal的更新顺序来判断的。在标准的autosar架构中,comsignal是一个最小的数据单元,用于在不同的ecu之间传输数据。comsignal可以表示为一个信号,例如车速、转速等。comsignal可以在ecu之间交换,也可以在ecu内部使用。每个comsignal都可以拥有一个或多个comsignalgroup,其中每个comsignalgroup包含一组相关的comsignal。这些comsignal可以具有不同的数据类型、精度、单位和值范围。comsignalgroup可以在ecu之间交换,也可以在ecu内部使用。
当一个comsignal或comsignalgroup的值发生变化时,comnotification会将更新事件通知给所有已注册该comsignal或comsignalgroup的应用程序。应用程序可以在接收到更新事件时执行自定义逻辑。
comnotification的接收对象的依存关系是基于comsignal的更新顺序来判断的。如果多个comsignal的更新顺序存在依赖关系,那么它们的接收对象之间也会存在依赖关系。例如,如果一个comsignal的更新依赖于另一个comsignal的更新,那么它们的接收对象之间也会存在依赖关系。在这种情况下,应用程序需要确保在接收到依赖的comsignal的更新事件后再处理当前comsignal的更新事件,以避免使用不一致的数据。
总之,comnotification的接收对象的依存关系是基于comsignal的更新顺序来判断的。如果多个comsignal的更新顺序存在依赖关系,那么它们的接收对象之间也会存在依赖关系。应用程序需要确保在接收到依赖的comsignal的更新事件后再处理当前comsignal的更新事件,以避免使用不一致的数据。


主流的裸眼3D技术有哪些
低功耗蓝牙模块在现代医疗领域表现如何?
【试验机老二】自动多功能推拉力机有哪些生产厂商?
为解决半导体困境,华为疯狂投资17家公司
为捍卫合法权益,马云不再帮美增加就业
AUTOSAR中CAN信号是如何触发COM回调的呢?
解析智能供配电系统的发展现状
NVIDIA AI机器人开发— NVIDIA Isaac Sim入门
RFID腕带在医疗物联网中的应用
高通连续收购,夯实无线和图像处理技术
我们即将迎来CPU市场近30年最大的、最乱的竞争
韩国KT专为5G客户推出云游戏流媒体服务,于2020年3月启动
北鲲云SaaS平台让生物医学关键环节不再靠“猜”
宁波智慧港口”基于5G SA网络,完成了以“1+1+3”智慧港口实施方案
噪声对策关键之片状共模扼流线圈
鸿蒙“超级终端”将至 120多家知名应用厂商已参与
VM系列振弦采集模块的信号检测与分析计算
一加6t什么时候上市 新旗舰6日零点开售 一加成全球旗舰机核心品牌
带闹钟的夜灯电路图解说明
机器人版的王者荣耀,以赛事为核心的机器人教育体系