AUTOSAR架构中的配置文件
注:本文首发于公众号“嵌入式软件实战派”
你有没有发觉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] */};
m_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在总线上传输的信号更少。
例如
关注“嵌入式软件实战派”,回复“AUTOSAR”获得更多实战教程。
AUTOSAR架构中的配置文件相关推荐
- AUTOSAR从入门到精通100讲(三十三)-AutoSar架构中的诊断事件管理
Dem在AutoSar架构中的角色和位置 Dem(Diagnostic Event Manager)诊断事件管理,属于Autosar BSW(Basic Software)中的系统服务,在整个架构中所 ...
- AUTOSAR从入门到精通100讲(十三)--autosar架构中的ARXML
在AUTOSAR架构下,ARXML文件作为通用配置文件或数据库文件,在数据传输和存储中起到关键作用 什么是XML? XML(eXtensible Markup Language)可扩展标记语言,是一种 ...
- AUTOSAR从入门到精通100讲(二十五)-AutoSar架构中的Methodology
AUTOSAR为汽车电子软件系统开发定义了通用的技术方法,即AUTOSAR方法论.该方法论描述了从系统底层配置到ECU可执行代码产生过程的设计步骤. AUTOSAR开发方法是基于虚拟功能总线的开发方法 ...
- AUTOSAR从入门到精通100讲(十三)-autosar架构中的ASPICE模块
ASPICE,全称"Automotive Software Process Improvement and Capacity Determination" ,汽车软件过程改进及能力 ...
- autosar架构详细介绍_【技术】基于AUTOSAR的电机驱动系统分析
来源 | 前瞻情报部 作者 | 汽车软件 进圈 | "动力总成测试群",关注本公众号后,添加文末主编微信,备注"进圈" 前言 纯电动汽车和混合动力汽车是新能源汽 ...
- “使用达芬奇软件实现Autosar架构:配置和注意事项“
Autosar (Automotive Open System Architecture) 是一种开放式的汽车电子系统架构.它通过规范化电子控制单元 (ECU) 之间的通讯和软件架构,以实现不同厂商之 ...
- AUTOSAR 架构下看门狗的理解
一.简介 本文主要介绍AUTOSAR 架构下的WdgDriver WdgIf WdgM 模块,分析模块之间的依赖关系以及运行原理以帮助快速理解.本文以MPC5746R为主控芯片,以FS6500为SBC ...
- 来来来!我告诉你 AUTOSAR架构深度解析从入门到放弃
如何快速学习AUTOSAR? 关于AUTOSAR的背景和架构信息,这里就不详细展开了.大家可以参看: AUTOSAR的分层架构 一文了解.今天我们重点讲讲如何快速学习AUTOSAR架构的方法. 如何获 ...
- 读懂Adaptive Autosar架构-入门篇
虽然现在绝大多数的量产车主要还是一个代步工具以满足我们的出行需求,而与我们的信息娱乐生活所分离,在未来汽车将与我们的日常息息相关.想要达到这一目标汽车E/E架构和软件架构将会有巨大的革新.本文的前部分 ...
最新文章
- Ubuntu Server上的LVM配置
- mac电脑简单好用的非主流程序
- 《网易编程题》疯狂队列
- Linux复位usb hub,Linux USB subsystem --- USB Hub initialize
- java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo
- 的使用_面部精华使用方法和使用步骤;
- tensor判断是否相等_PyTorch的Tensor(中)
- 怎么样成为一个高手--有悟
- IE浏览器中a:hover设置background失效的解决方法
- webpack 生产环境下插件用途
- GPGGA NTRIP RTCM 笔记
- java —— int和byte的相互转化工具方法
- Office word中去掉首页的页眉
- 9.支撑向量机SVM
- Chrome最好用的插件都在这里了
- java字符串流与管道流
- 夯实Java基础(面向对象)
- 网页判断是手机访问还是PC访问
- K线形态识别_冉冉上升
- Geometric Deep Learning Grids, Groups, Graphs, Geodesics, and Gauges 理解
热门文章
- 四色菊皇家大学 SiSaKet Rajabhat University (SSKRU)
- 黑客丛林通关攻略参考(更新中)
- Stimulsoft 仪表板.JS 2022.2.1
- 手Q游戏中心的个性化推荐实战 | CSDN博文精选
- 学python之leetcode1863题 python3转python2
- JSP作业提交管理系统(JSP作业管理系统)JSP学生作业管理JSP教师作业批改业提交管理系统
- 云安全软件市场现状研究分析报告 -
- 文献解读:纵向数据的测量不变性和交叉滞后模型(一)
- Spoon Kettle 输入之获取文件名(Get file names)
- 子平真诠释疑笔记(四)