这是场景...
对于每个任务,我需要2个不同的可运行对象...
- First : to receive data at specific times at the beginning of the task.
- Second: to send data at specific times at the end of the task.
这些可运行对象中的每一个都应在任务开始时使数据可用于不同的组件过程(与发送方接收方接口的隐式接收模式相同,但具有某些无法使用filter属性实现的过滤)或仅在任务结束时的特定时间发送数据。
现在我该如何处理?我应该为每个组件定义这些可运行对象吗?还是让所有组件之间的通信都通过应该处理发送和接收定时的公共组件?
我是AUTOSAR的新手,所以请告诉我什么是最好的解决方案。
答案 0 :(得分:0)
...让所有组件之间的通信通过应该用于处理发送和接收定时的通用组件?
这就是我在过去几年中看到的很多东西。许多从事通信堆栈的开发人员不了解其功能,实际上无法重新实现SWC中在ComStacks ..甚至在Vectors CANbedded堆栈(IL(交互层))中已经可用并且已经完成多年的功能。这使得SWC非常依赖于通信,因此更改的可能性非常高。
IL和AUTOSAR Com根据SystemDescription / EcuExtract(和旧的DBC文件)PduTiming,IPDU传输模式和信号传输属性来处理超时处理。
IPDU传输模式:
* NONE->不是由Com触发,而是由Com_TriggerIPDUSend()手动触发
* PERIODIC-> Com根据配置时间周期周期性地触发
*直接->在已配置信号的“事件”(TRIGGERED *)上触发
*混合(PERIODIC + DIRECT)->“ EventPeriodic” ..这还包括可能的MDT(最小时间延迟)
仅列出一些信号属性值: * PENDING-在与IPDU TxMode混合时,这不会触发事件,因此直到下一个传输事件(或仅在下一个消息周期才) *触发-就像以前的DBC“ OnWrite” * TRIGGERED_ON_CHANGE-就像以前的DBC“ OnChange”一样,因此仅当值与上一个值相比发生变化时
AUTOSAR Com还可以根据配置的时间段监视接收的IPDU。
IpduGroups可用于启用/禁用IPDU传输和IPDU RxDeadline监视(超时处理)。
因此,最后,大多数SWC并不需要真正关心接收/传输时间..它们只是向/从其端口写入/读取,仅此而已。
另一个好功能是SignalGroup处理,它消除了使复杂数据(结构)保持同步的负担。以前,有人可能会锁定中断,直到消息中的所有数据都更新为止。
E2E保护现在可以由E2E变压器处理。
因此,可以在VFB(虚拟功能总线)级别上对SWC进行建模,然后将其映射到ECU。它们的连接保持不变,但是如果SWC仅通过同一ECU内的RTE上的Intra-ECU进行通信,或者通过ComStack通过ECU跨ECU跨ECU间进行通信,则与SWC完全无关。 SWC可以使用dataReceivedEvents或dataReceiveErrorEvents来获取有关接收或接收错误(例如超时)的信息,以及dataSendCompletedEvent有关传输完成的信息。或者,他们也可以通过检查Rte_Read / Write调用的RTE返回代码来“轮询”。
结合DataTransformation,Data / PortMapping和转换的RTE功能,拥有可重新配置的SW应该更容易,而无需一直更改SWC。
无论将SWC转移到多核处理器(带有MultiCore OS和MultiCore RTE)的另一个内核上,还是将功能从传感器转移到高性能中央ECU上,都将更加容易。 >
PDU级别的网关路由关系甚至不需要任何SWC,这可以通过配置PduR路由关系并在此处交换POSTBUILD配置来解决。即使在Com中基于信号的路由也可以这样完成。