使用CAN收发中断方式时,Autosar消息路由调用的API咨询
Autosar规范下CAN中断场景的PDU路由API说明
核心分层调用流程(CAN RX中断路径)
Autosar采用分层架构,CAN报文接收及PDU路由需按Can Driver → CanIf → PduR的顺序调用标准API,以下是各层关键接口:
1. Can Driver层(硬件抽象层,CAN ISR内调用)
当CAN接收中断触发后,Can Driver完成硬件报文读取后,必须调用Autosar标准API:
void Can_RxIndication( const Can_HwHandleType HwMailbox, const Can_PduType* PduInfoPtr );
- 作用:将接收到的CAN L-PDU(含ID、数据、长度)通知给CanIf模块,无需手动复制缓冲区——Can Driver会按配置将报文存入指定缓冲区,并通过
PduInfoPtr传递指针。
2. CanIf层(接口适配层)
CanIf接收Can Driver的指示后,完成PDU格式转换、过滤等适配操作,随后调用Pdu Router的标准接收指示API:
void PduR_RxIndication( PduIdType RxPduId, const PduInfoType* PduInfoPtr );
- 作用:将处理后的PDU传递给PduR模块,启动路由流程。
3. PduR层(PDU路由核心)
PduR根据预先配置的路由规则(由Autosar配置工具定义,如DaVinci Configurator),自动完成PDU的路由转发:
- 若需转发至本地上层模块(如Com、Nm),PduR会调用对应模块的
RxIndicationAPI(如Com_RxIndication()); - 若需转发至其他ECU(即跨ECU路由),PduR会调用下层发送接口触发发送流程。
关键注意事项
- 所有API均为Autosar规范强制定义,无需自行实现,仅需通过配置工具关联各模块的接口映射;
- CAN接收中断内的操作需保持轻量化,Can Driver仅负责硬件交互与
Can_RxIndication()调用,复杂逻辑(如过滤、路由)交由CanIf和PduR在任务上下文处理(若配置为非中断上下文); - 缓冲区管理由Can Driver按配置自动完成,无需手动复制报文——配置时需指定接收缓冲区的数量、大小及分配方式。
内容的提问来源于stack exchange,提问作者최 고운
相关产品推荐
相关产品推荐

