AUTOSAR中 CAN总线数据通过COM模块收发流程

在这里插入图片描述

AUTOSAR中CAN总线数据通过COM模块收发流程

printf("欢迎关注公众号:车载嵌入式探索者,博主建立了一个车规级开发交流群,
感兴趣的朋友可以关注公众号,加个人WX:_kevin0123456789,备注:车载。")

1、AUTOSAR中 CAN总线数据通过COM模块发送流程

①、SWC会将数据发送给RTE层;
②、RTE层调用COM模块的Com_SendSignal()函数将数据发送至COM模块;
③、BSW任务调度器EcuM周期性的调用Com_MainFunctionTx()函数,Com模块将从其缓存器中读取需发送的数据打包成PDU格式;
④、Com模块的Com_MainFunctionTx()函数将调用PduR模块的PduR_ComTransmit()函数,将数据传给PduR模块;
⑤、PduR模块将不会对数据做任何处理,直接进行路由;PduR模块路由到CAN Interface模块,调用CanIf_Transmit()函数,这样数据从PduR模块传给了下层的CAN Interface模块;
⑥、CAN Interface模块再调用Can Driver模块的Can_Write()函数,将数据写入相应的寄存器;
⑦、与CAN接收功能一样,Can_Write()函数将访问仲裁,数据长度和数据寄存器,将数据写入。

2、AUTOSAR中 CAN总线数据通过COM模块接收流程

①、BSW任务调度器EcuM周期性的调用Can模块的接收函数Can_MainFunction_Read()函数;
②、在Can模块Can_MainFunction_Read()函数中检查所有潜在的新接收数据的Can控制器;将访问CanController(硬件)的寄存器—仲裁寄存器,数据寄存器和数据长度寄存器(保证读取数据的有效性),并读取这些寄存器的数据;即包括ID、 DLC、 SDU
③、数据读取结束后,这时继续调用CAN Interface模块的CanIf_RxIndication()函数,这样数据从CAN Driver模块传给了上一层的CAN Interface模块;
④、CAN Interface模块再调用PduR模块的PduR_RxIndication()函数,将数据传到PduR模块;
⑤、PduR模块路由到Com模块,调用Com_RxIndication()函数,将数据传到Com模块,Com模块将会把数据存入其缓存,供应用层软件读取使用。

printf("欢迎关注公众号:车载嵌入式探索者,博主建立了一个车规级开发交流群,
感兴趣的朋友可以关注公众号,加个人WX:_kevin0123456789,备注:车载。")
### AUTOSAR DEM 模块数据流设计与实现 #### 数据流概述 AUTOSAR DEM (Diagnostic Event Manager) 模块负责管理并记录车辆内的各种故障和诊断事件。该模块接收来自基础软件层(BSW) 和软件组件(SWC) 的输入信号,这些信号代表了不同类型的监测对象的状态变化。一旦接收到状态变更的通知,DEM 将依据预定义的策略评估此更改,并决定如何处理所报告的信息。 #### 输入数据源 主要的输入来源于两个方面: - **BSW/ SWC**: 当检测到任何被监视的对象发生状态改变时,会触发向DEM发送通知的动作[^3]。 - **Monitor Modules**: 这些模块能够识别重要的错误情况并将它们传递给用户界面显示警告指示灯等。 #### 处理逻辑 对于每一个到达的故障事件及其关联的状态信息,DEM 需要执行一系列操作来进行适当响应: 1. 判断当前接收到的是何种类型的状态(PreFail, PrePass, Passed 或 Failed),这决定了后续应采取的具体措施; 2. 如果处于`PreFail`或`PrePass`阶段,则应用基于时间(TimeBased)或是计数器(CounterBased)机制来验证故障的真实性;而对于已经确认的情况(`Passed`, `Failed`),则无需额外判断即可直接做出反应[^4]。 #### 输出目标 最终的结果会被分发至多个目的地以确保全面覆盖必要的应用场景: - **ECU内部存储区**:保存历史记录以便日后查询分析; - **OBD II接口**:通过标准化协议向外传输实时诊断码供维修工具读取; - **仪表盘或其他HMI设备**:展示即时警报提示驾驶员注意潜在问题的存在。 ```python def process_event(event_status): """ Process the incoming diagnostic event based on its status. Args: event_status (str): Status of the received event ('PreFail', 'PrePass', 'Passed', or 'Failed') Returns: str: Action to be taken as a result of processing this event """ actions = { "PreFail": lambda: apply_debouncing_strategy("time_based"), "PrePass": lambda: apply_debouncing_strategy("counter_based"), "Passed": report_immediately, "Failed": report_immediately } action_to_take = actions.get(event_status, unknown_event_handler) return action_to_take() def apply_debouncing_strategy(strategy_type): """Apply debouncing strategy according to given type.""" pass # Implementation details depend on specific requirements def report_immediately(): """Report immediately without further checks.""" pass # Direct reporting logic here def unknown_event_handler(): """Handle unexpected events gracefully.""" raise ValueError("Unknown event status encountered.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin的学习站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值