《AutoSar实战》读写DID之三:代码实现


->返回总目录<-

前言

本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。
DID读写功能实现流程包括如下几点:
1, CDD准备 2, 工具链配置 3, 代码实现

本文讲述流程3
在这里插入图片描述
话不多说,走你~

一、检查生成的接口以及数据类型

书接上文《AutoSar实战》读写DID之二:工具链配置,我们已经完成了基于DaVinci 工具链 DID 0x6666 的配置以及接口的生成。

打开工程中的SWC(AppDiag.c),并检查以下生成的内容是否齐全了。

1. 读DID函数接口生成

在这里插入图片描述

2. 写DID函数接口生成

在这里插入图片描述

3. 写NvM接口生成

该类接口,由RTE生成,在Rte_AppDIag.h文件中生成。(SWC名称:AppDIag)
看下图可知,其实就是对底层NvM的函数NvM_WriteBlock和NvM_GetErrorStatus接口进行二次封装了。
1)写入NvM接口

4. RAM数组生成

该数组和ROM之间有着映射关系。它里面存储的数据会在下电时清除,上电时重新把ROM的数据Copy一次。
在这里插入图片描述

~

二、代码编写

1. 读DID

博主这里通过再次封装一个函数来实现了,如下图。
在这里插入图片描述

关于上图的生成接口的解析参考下表的技术文档描述:
在这里插入图片描述

形参Data的数据类型为uint8*,通过函数形参的方式将RAM上电存储的数据 赋值在形参Data中
在这里插入图片描述

具体实现

Std_ReturnType	DiagApp_ReadDID_6666_ChunFengYouXin(uint8 *p_bufptr_U8A)
{

  uint8	i;

  for( i = 0; i < sizeof(Rte_AppDiag_NvMShw_6666_ChunFengYouXin); i++)
  {
    p_bufptr_U8A[i] = Rte_AppDiag_NvMShw_6666_ChunFengYouXin[i];
  }

  return		(E_OK);

}

~

2. 写DID

博主这里通过再次封装一个函数来实现了,如下图。
在这里插入图片描述

关于上图的生成接口的解析参考下表的技术文档描述:
在这里插入图片描述

形参ErrorCode的数据类型为Dcm_NegativeResponseCodeType* :uint8*,通过函数形参的方式将写入不成功的情况返回NRC给底层DCM模块。
在这里插入图片描述

具体实现

/* 定义写数据的动作状态 0:未执行写操作; 1:正在执行写操作 */
typedef enum
{
  WRITEDID_NO_ACTION		=	0,
  WRITEDID_PROCESSING
} eDIDWriteStatus; 

eDIDWriteStatus	writeDID_6666; /*声明状态枚举变量*/

writeDID_6666 = WRITEDID_NO_ACTION; /* 初始化操作 */


/*
 *	 Write DID:	6666
 */
Std_ReturnType	DiagApp_WriteDID_6666_ChunFengYouXin(const uint8 *p_bufptr_U8A, uint8 *errorcode)
{
  uint8	i;
  NvM_RequestResultType		NvmErrorStatus;
  Std_ReturnType	writeDIDResult = DCM_E_OK;  /* 函数返回值变量 */

  *errorcode = DCM_E_POSITIVERESPONSE;  /* AutoSar DCM模块的标准数据,标识积极响应,等于0 */

  switch ( DiagApp_DID_Vars.writeDID_6666 ) 
  {
  case WRITEDID_NO_ACTION:
    for( i = 0; i < sizeof(Rte_AppDiag_NvMShw_6666_ChunFengYouXin); i++)
    {
      Rte_AppDiag_NvMShw_6666_ChunFengYouXin[i] = p_bufptr_U8A[i]; /* 将诊断仪要写入的数据存储再RAM中 */
    }

    (void)Rte_Call_PS_AppDiagDID_6666_ChunFengYouXin_WriteBlock(Rte_AppDiag_NvMShw_6666_ChunFengYouXin);   /* 调用写数据接口,将数据写入NVM */

    DiagApp_DID_Vars.writeDID_6666 = WRITEDID_PROCESSING;

    writeDIDResult = DCM_E_PENDING;
    break;
  case WRITEDID_PROCESSING:
    (void)Rte_Call_PS_AppDiagDID_6666_ChunFengYouXin_GetErrorStatus(&NvmErrorStatus); /* 获取NvM写入状态是否存在错误 */

    switch(NvmErrorStatus)
    {
    case NVM_REQ_OK:
      writeDIDResult = DCM_E_OK; /* AutoSar DCM模块的标准数据,标识积极响应,等于0 */

      DiagApp_DID_Vars.writeDID_6666 = WRITEDID_NO_ACTION;
      break;
    case NVM_REQ_PENDING:
      writeDIDResult = DCM_E_PENDING; /* AutoSar DCM模块的标准数据,标识正在执行,等于10 */
      break;
    default:
      writeDIDResult = DCM_E_NOT_OK; /* AutoSar DCM模块的标准数据,标识未成功执行操作,等于1 */

      DiagApp_DID_Vars.writeDID_6666 = WRITEDID_NO_ACTION;

      *errorcode = DCM_E_GENERALPROGRAMMINGFAILURE; /* AutoSar DCM模块的标准数据,标识NRC72,等于114 */
      break;
    }
    break;
  default:
    writeDIDResult = DCM_E_NOT_OK;

    DiagApp_DID_Vars.writeDID_6666 = WRITEDID_NO_ACTION;
    break;
  }

  return		(writeDIDResult);
}

总结

博主是AutoSar小白,如果哪里表达的有问题,还请大佬们指点指点哈。接下来,让我们在后面的博文再相会哈~

->返回总目录<-

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
CAN状态管理(CAN State Management,简称CANSM)是AUTOSAR通信模块的一部分,用于管理CAN总线的状态。CANSM的主要功能是确保所有节点能够根据通信需求正确地切换CAN总线的状态,以实现正常的通信。 CANSM主要包括以下几个方面的功能: 1. 初始化和配置:CANSM负责初始化和配置CAN总线驱动,并在系统启动时确保CAN总线处于适当的状态。这包括设置通信参数、初始化总线控制器和节点等操作。 2. 状态管理:CANSM通过监测网络中节点的状态变化来管理CAN总线的状态。它能够检测到节点的上线和下线,并根据节点的状态进行状态切换。例如,当一个节点上线时,CANSM会检查通信链路是否正常,以确定是否需要切换到活动状态。 3. 容错管理:CANSM还负责处理节点之间的通信故障。当检测到通信链路故障或节点失效时,CANSM会根据网络管理策略进行相应的容错处理,例如切换到备份链路或采取其他纠错措施,以确保通信系统的可靠性和稳定性。 4. 通信链路管理:CANSM还负责管理CAN总线上的通信链路。它会监测可以通信的模块,并根据需要打开或关闭通信链路,以提高系统的效率和节省资源。 总之,CANSM是AUTOSAR通信模块中负责管理CAN总线状态的重要组成部分。它能够确保CAN总线在系统启动和运行过程中处于正确的状态,并能够处理通信故障和容错管理。通过CANSM的管理,可以提高通信系统的可靠性和稳定性,为车辆电子控制单元的通信提供保障。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

&春风有信

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

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

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

打赏作者

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

抵扣说明:

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

余额充值