你好,我使用的是带有 SW32K1_S32M24x_RTD_R21-11_3.0.0 的 S32K144,并已将 CanIf 配置为使用自定义回调函数。
我的配置:
CanIfRxPduUserRxIndicationName 设置为"Service_CanIf_RxIndication"
当收到 CAN 消息时,CanIf_RxIndication() 将调用该回调。
问题
我注意到在 CanIf_RxIndication() 中,CAN ID 可通过 Mailbox->CanId 参数获得。但是,在我的 Service_CanIf_RxIndication() 回调中,我只能接收到 PduId,而无法检索到实际的 CAN ID。此外,我还注意到 CanIf.h 标题状态:" 短截线版本-此文件仅包含示例代码。"
我的问题
1.我能修改或替换 CanIf.c 吗?短截线代码?
自 CanIf.h 起 明确表示它是 " 短截线 版本 " 和 " 示例代码 ",修改 Canif.c 以将 CAN ID 传递给用户回调是否可以接受?
2。修改短截线代码会违反 AUTOSAR 架构吗?
如果我自定义 CanIF 短截线实现,这是否会破坏 AUTOSAR 合规性或导致任何兼容性问题?
3.是否有其他解决方案?
有没有推荐的方法可以在不修改CanIF源代码的情况下将CAN ID传递给上层回调?
环境
MCU: S32K144
RTD 版本:SW32K1_S32M24x_RTD_R21-11_3.0.0
集成开发环境S32 Design Studio 3.6
感谢您的帮助!
你好,@Soratari、
Q1。是的,短截线模块是用来编辑/替换的。由于 Canif 模块是一个短截线,它只提供了 CAN 驱动程序所需的头文件,例如 CANIF_CBK.H。
Q2. 不,只要您遵守指南,不更改标准化函数名、变量等,就不会违反 ASR 架构。
Q3。通常,短截线模块用于测试目的。您应该使用第三方供应商(如 Elektrobit (EB)、Vector 等)提供的 CanIf、EthIf& LinIf。不过,出于调试目的,可以自行修改。
致以最诚挚的问候,
Julián