求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
AUTOSAR实战教程
1.AUTOSAR相关知识
1. 老板说项目要上AUTOSAR,我慌得一批
2. 我淡定地撸了一遍AUTOSAR的基本概念
3. AUTOSAR初学者最想搞懂的东西
2.AUTOSAR理论基础
AUTOSAR架构
1. AUTOSAR架构的故事(干货)
2. AUTOSAR架构之通信服务(干货)
3. 这次我通过Interface来贯穿整个AUTOSAR架构
AUTOSAR启动与初始化
1. 解析AUTOSAR Startup
2.AUTOSAR架构中的配置文件
3.SWC详解与配置实现
1.AUTOSAR Port原理概念详解
4.BSW原理和实战演练
1. AUTOSAR折磨,从新建工程开始
2. AUTOSAR的BswM模块详解
3. 图解AUTOSAR NVM模块
4. AUTOSAR架构的 Pdu Router
5. AUTOSAR中的vLinkGen可以干嘛
6. MCAL Wdg模块解析
7. MCAL PWM Module详解
8. AUTOSAR的Memory是如何设计的?
9. AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
10. AutoSAR,在多核汽车MCU中如何运行
11. AUTOSAR架构中的Configurator
12. AUTOSAR中的Fee
5.MCAL应用配置
1.ADC模块的配置
2.MCU模块的配置
3.PWM模块的配置
 
 
AUTOSAR架构中的Configurator
作者:实战派大师兄
2969 次浏览
13次  

你有没有发觉AUTOSAR代码里面有些文件名很是引起你注意,如 xxx_PBcfg.c 、 xxx_ Lcfg.c 和 xxx _Cfg.h 。

看起来,这像是配置文件,实际也证明跟AUTOSAR配置有关(更改配置工具如 Davinci Configurator 上的配置信息)生成代码时,这些文件会有相应的变化。

那么,问题来了,一个xxx_cfg.h或者xxx_cfg.c就搞定了,为什么会有三种配置文件呢? 于是,我要刨根问底了。

cfg还好理解,就是configuration的意思,这个PB和L又是什么意思? 翻了很多AUTOSAR官方文档,终于找到了,其实 AUTOSAR Base Software支持以下几种配置类型:

1. Pre-compile time

  • 处理器指令
  • 代码生成(选择和合成)

2. Link time

  • module外的const数据 ; 模块编译后和配置数据

3. Post-build time

  • 加载Module外部的const数据 . 加载数据到指定的memory段

独立于配置类,可以通过变化点提供单个或多个配置集。如果提供了多个配置集,则在运行时绑定变量点的情况下,将在运行时选择实际使用的配置集。

在许多情况下,一个模块的配置参数将具有不同的配置类别。 例如,提供构建后时间配置参数的模块仍将具有一些可进行预编译时间配置的参数。

这样看来,这个PB就是post-build time了,而L就是Link time了。那么各个配置文件有什么作用和区别呢? Pre-compile time 使用:

  • 启用 / 禁用可选功能。这样可以排除不需要的部分源代码。
  • 优化性能和代码大小。在大多数情况下,使用 #defines 比访问常量甚至通过指针访问常量的代码效率更高。

生成的代码避免了代码和运行时开销。 Pre-compile的配置要通过两个配置文件 ( xxx_ Cfg . h , xxx_Cfg.c ) 实现:

  • xxx_Cfg.h 包含如 宏定义和或者 #defines
  • xxx_Cfg.c 包含如 const 数据


Nm_cfg.c

#include "Nm_Cfg.h"

/*lint -restore */

CONST ( Nm_NmFunctionTableType , NM_CONST )
Nm_NmFunctionTable[ 1 ] = { /* PRQA S 1514, 1533
*/ /* MD_CSL_ObjectOnlyAccessedOnce */

/* Index GetLocalNodeIdentifier
GetNodeIdentifier GetPduData
GetState NetworkRelease NetworkRequest
PassiveStartUp Referable Keys */

{ /* 0 */ CanNm_GetLocalNodeIdentifier ,
CanNm_GetNodeIdentifier , CanNm_GetPduData ,
CanNm_GetState , CanNm_NetworkRelease ,
CanNm_NetworkRequest ,
CanNm_PassiveStartUp } /* [CanNm] */

};

Nm_Cfg.h

/* Global Properties */

#ifndef NM_DEV_ERROR_DETECT

#define NM_DEV_ERROR_DETECT STD_ON

#endif

#ifndef NM_DEV_ERROR_REPORT

#define NM_DEV_ERROR_REPORT STD_ON

#endif

#define NM_VERSION_INFO_API STD_OFF

Nm.c

/* NM Interface version is decimal coded. */

CONST ( uint8 , NM_CONST ) Nm_MainVersion =
NM_SW_MAJOR_VERSION ;

CONST ( uint8 , NM_CONST ) Nm_SubVersion =
NM_SW_MINOR_VERSION ;

CONST ( uint8 , NM_CONST ) Nm_ReleaseVersion =
NM_SW_PATCH_VERSION ;

Link time

Link time 配置用于:

  • 模块配置仅仅对目标代码可用(例如 IP Protection和warranty 原因)
  • 在编译之后但在链接之前创建配置。

例如 Mcu_Lcfg.c

/* QAC Warning: START Msg(2:3211)-2 */

/* Data Structure of RAM setting Configuration */

CONST ( Mcu_RamSetting , MCU_VAR )
Mcu_GstRamSetting [ 1 ] =

{

/* Index: 0 - McuRamInitConfiguration */

{

/* pRamStartAddress */

/* MISRA Violation: START Msg(4:0306)-1 */

/* QAC Warning: START Msg(2:0315)-3 */

/* QAC Warning: START Msg(2:3892)-4 */

( P2VAR ( uint8 , TYPEDEF , MCU_CONFIG_DATA ))
0xFEBD0000UL ,

/* END Msg(2:3892)-4 */

/* END Msg(2:0315)-3 */

/* END Msg(4:0306)-1 */

/* ulRamSectionSize */

0x00000100UL ,

/* ucRamInitValue */

0xFFU ,

/* enRamWriteSizeSel */

MCU_8BIT_SIZE

}

};

Mcu.c

/* Get the pointer to the RAM structure */

LpRamSetting = & Mcu_GstRamSetting [ RamSection ];

Post-build time Post-build time会用于

  • 数据配置,其中仅定义结构,但在 ECU 生成期间未知内容
  • 在 ECU -build时之后(例如,生产end of line,测试和校准期间)可能会更改或必须修改的数据配置
  • 跨不同汽车版本(相同应用,不同配置)的 ECU 的可重用性,例如 与豪华版轿车的 ECU 相比,低成本版轿车的 ECU 在总线上传输的信号更少。

例如


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



2969 次浏览
13次