[AutoSar]一种ECU间CAN通信的优化方法

关键词

嵌入式、C语言、autosar

平台说明

项目Value
OSautosar OS
autosar厂商EB
芯片厂商英飞凌 TC397
编程语言C,C++
编译器TASKING

在这里插入图片描述

一、背景

  在一个项目中,会从多个外部ECU或者sensor通过can总线接收大量的object,在应用层中对这些object进行处理和使用。

二、问题现象

  CAN 通讯占用了大量的CPU资源。

三、原因

  CAN->CANIF->PDUR->COM->RTE->ASW memory
copy了多次,浪费了大量的cpu资源。
在这里插入图片描述

四、解决办法

  在can if 上层创建一个CDD,对数据进行打包后通过DMA传到ASW使用。
在这里插入图片描述

五、实现

  对external ECU 的can通讯重新调整,依据循环帧ID 越大优先级越低或者其他标志位,判定收到的object完整后进行打包。

5.1 配置

在这里插入图片描述

5.2 code

该代码基于EB工具链生成,Vector工具链生成的代码略有区别,请自行区分。

Sdc_CoreConfigPtr->CanControllerMsgRAMMapConfigPtr[3].CanControllerMsgRAMMap[CAN_17_MCMCAN_RBSA];/*找到canbuffer*/
CONST( CanIf_CbkFctPtrTblType, CANIF_APPL_CONST ) CanIf_CbkFctPtrTbl[] =
{
  {
     /* PDUR */
    &PduR_CanIfRxIndication,
    &PduR_CanIfTxConfirmation,
  },
  {
     /* CAN_TP */
    &CanTp_RxIndication,
    &CanTp_TxConfirmation,
  },
  {
     /* CDD */
    &Xcp_CanIfRxIndication,
    &Xcp_CanIfTxConfirmation,
  },
  {
     /* CAN_TSYN */
    &CanTSyn_RxIndication,
    &CanTSyn_TxConfirmation,
  },
  {
     /* CAN_NM */
    &CanNm_RxIndication,
    &CanNm_TxConfirmation,
  },
  {
     /* uerdefien */
    &uerdefine_CanRxIndication,/*函数内部用户实现*/
    NULL_PTR,
  },
};

用户代码请根据自身需求修改和实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老灰╮(╯-╰)╭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值