AUTOSAR配置中的PostBuildPrecompileLinktime

在AUTOSAR的配置软件中,经常可以见到PostBuild、Precompile、Linktime这三个的影子,所以想搞清楚它们的区别,以及知道大概是干什么的。

1)DaVinciCFG中

2)EB工具中

3)在买AUTOSAR模块时

02

编译基础知识回顾

在研究之前,先复习一下编译过程的基础知识

注意:

静态库是经过编译的二进制文件。在链接阶段,引用库一旦链接成功,将汇编生成的目标文件与引用的库一起链接打包到可执行文件当中。

预处理Preprocessing:

1、处理一些#开头的预处理指令,比如#if等

2、进行宏定义的替换

3、去除代码注释

编译Compilation:把.C文件编译生成汇编代码.asm

汇编Assemble:把.asm会变成中间文件.o

链接Linking:链接.o,.a,.lib文件生成可执行文件

03

为什么需要配置?

AUTOSAR标准了很多东西,所以在考虑问题方面,需要做的更加全面,以应付不同的使用软件使用场景。那么代码不可避免的就需要配置一些东西,比如使用宏定义来选择哪些模块不需要。再比如,传统的ECU汽车软件开发结束后,不修改代码是无法更新DBC的,即使功能类似,也做不到,只能重新开发,改动比较大,重新开发还要重新测试。因此AUTOSAR提出了Post-build的方案,运行在开发结束后对ECU的参数进行修改,以便于节省维护和测试成本。

按照编译过程的阶段,把配置方法进行分类,分为三类,分别是Pre-compile、Linktime和Post-build,下面三类AUTOSR都是支持的。

04

Pre-Compile

实现手段:

1、通过宏定义来Enable和disable一些不需要的模块

2、使用宏定义来定义常量进行配置

在预编译阶段,就会把这些配置项进行宏替换,在实际使用当中,配置项放在单独的.c和.h文件中(*_Cfg.h,*_Cfg.c),比如Spi.c的配置项,放在了Spi_Cfg.c和Spi.h中,并且被配置的文件(比如Spi.c必须有源文件)不能是.o,.a等库文件或者中间文件,因为库已经被预编译过一次了,只能参与到链接。

优势:

1)节省运行时的开销,在预编译阶段就完成了配置

劣势:

1)参数配置是通过宏来实现,要求被配置的C要以源码形式提供,不能以库或者中间文件的形式

2)参数类型更改需要重新编译软件

*_Cfg.h中放宏定义

*_Cfg.c中放const常量

一个示例

eg.使能和关闭一个功能

Spi_Cfg.h:

Spi_Cfg.c:

Spi.c(必须要有Spi.c的源文件,不能是库)

05

Link-time

Linktime在链接时进行配置,适合对没有C源码的库(.a,.lib)或者中间文件(.o)进行配置。

eg.

Dem_Cfg.h

typedefuint16Dem_EventIdType;/*totalnumberofevents=380=>uint16required*/#defineDemConf_DemEventParameter_FLS_E_ERASE_FAILED_01U#defineDemConf_DemEventParameter_FLS_E_ERASE_FAILED_12U#defineDemConf_DemEventParameter_FLS_E_WRITE_FAILED_03U#defineDemConf_DemEventParameter_FLS_E_WRITE_FAILED_14U#defineDemConf_DemEventParameter_NVM_E_REQ_FAILED5U#defineDemConf_DemEventParameter_CANSM_E_BUS_OFF6UFls_Lcfg.c

#include"Dem_Cfg.h"/*forprovidingaccesstoeventsymbols*/constDem_EventIdTypeFls_WriteFailed[2]={DemConf_DemEventParameter_FLS_E_WRITE_FAILED_1,DemConf_DemEventParameter_FLS_E_WRITE_FAILED_2};FileFls.c(availableasobjectcode):

#include"Dem.h"/*forreportingproductionerrors*/externconstDem_EventIdTypeFls_WriteFailed[];Dem_SetEventStatus(Fls_WriteFailed[instance],DEM_EVENT_STATUS_FAILED);06

Post-build

适合的场景:

1)适合ECU适配ECU的数据配置,比如产线出产后的一些标定和校准参数(这些参数事先在开发期间,不知道这些参数,一般每一台机器的因为硬件的微小差异导致每台机器的参数都不一样),或者每台机器的序列号、版本配置,都是属于Post-buildtime配置。

2)跨不同汽车版本(相同应用,不同配置)的ECU的可重用性,例如与豪华版轿车的ECU相比,低配版轿车的ECU在总线上传输的信号更少,其他配置一样。

Post-build概述

就是单独把配置的参数放到一个内存区域,这个区域可以单独被刷写(通过flash擦写工具,通过UDS服务,通过Bootloader修改参数),这样做的一个好处是,OEM不需要知道代码逻辑,甚至不需要编译器(有些符合功能安全的编译器是要license才能使用的),也能修改BSW总的部分配置参数。

Post-build的工作流

如前面所说Post-buildtime是在链接得到二进制后,再进行修改的,下面是Vector给出的一个Post-build的工作流:

1)分为两大块,左边是TIER1(零部件厂商,一般只做单个ECU的公司)的工作流,右边是OEM(整车厂,比如大众等)的工作流。

2)TIER1通过Vector的两个工具DavinciDeveloper和DabinciConfigratorPro配置完,开发后,再用编译器,编译链接,生成HEX文件。

3)OEM使用DabinciConfigrator可以更改软件的部分配置(不是全部),然后通过PostBuildTool生成二进制文件,单独更新配置到ECU

4)Tier1和OEM的主要区别是,OEM不需要编译器,并且只能配置部分参数。

Post-build分为两种

1)Post-BuildLoadable:配置参数只有一份,单独保存在flash的一个固定区域(特定地址),可以修改参数配置,可以单独被更新。

2)Post-BuildSelectable:配置参数预先配置好了几份放在flash的一个固定区域(特定地址),不能修改参数配置,只能从预先放好的配置中选择一份配置。

Post-build与Linktime的区别

2)Linktime完成后,不支持单独修改参数,要想修改参数需要重新编译链接,Post-build支持单独修改参数(通过flash擦写工具,通过UDS服务,通过Bootloader修改参数)

07

总结

注意事项:

1)如果需要使用Post-Build中的Loadable或者Selectable,在购买AUTOSAR时需要选择,就是说要多给钱。

2)配置参数不是多有的BSW参数都可以配置,哪些参数可以配置,哪些不可以配置需要和OEM沟通好,在AUTOSAR标准中也有定义,比如《AUTOSAR_SWS_COM.pdf》第129页。

THE END
1.C++静态库lib和动态库dll的优缺点使用方法【C++】静态库lib和动态库dll的优缺点、使用方法 创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下?><)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! c++系列专栏:C/C++零基础到精通 给大家跳段街舞感谢支持!? ? ? ? ? ? ? ? ? ? ? ?https://blog.csdn.net/TiSg0/article/details/132762076
2.职业前景分析(精选十篇)五、大学生月嫂的优势与劣势——基于SWOT战略方法分析 大学生的优势在于自身的学习能力强,能够很快地吸收国外先进的育婴经验,以及尽快掌握月嫂的基本技能,并很快能适应新的环境。与普通月嫂相比,专业知识的储备是她们比之不及的,大学生月嫂要有很强的自学能力,借鉴国外的育婴经验,结合具体家庭情况,制定适应婴儿和大人们https://www.360wenmi.com/f/cnkeyx4zvdoo.html
3.将Vue插件升级到同时支持Vue2和3的实践小结与方案一类似,在仓库中建两个分支 v2 和 v3,分别支持 Vue 的两个版本。 优势与劣势与方案一相同,唯一不同是只需要一个仓库,但是维护成本同样很大。 以上两种方案都需要维护两套代码,那么有没有一种解决方案是只用一套代码就能搞定的呢 方案三:使用 vue-demi https://cloud.tencent.com/developer/article/2047213
4.确定企业本身的竞争优势竞争劣势机会与威胁。的翻译是a放轻松点 Puts the relaxed spot[translate] avnc领域 正在翻译,请等待[translate] a确定企业本身的竞争优势、竞争劣势、机会与威胁。 Definite enterprise itself competitive advantage, competition inferiority, opportunity and threat.[translate]http://eyu.zaixian-fanyi.com/fan_yi_6746611
5.Android持久化保存cookie的方法AndroidCookies的优势 下面是使用cookies的主要优势: (1) 实现和使用都是非常简单的 (2) 由浏览器来负责维护发送过来的数据(cookies内容) (3) 对来自多个站点的cookies来讲,浏览器自动管理它们 Cookies的劣势 下面是cookies的主要劣势: (1) 它以简单的文本格式来存储数据,所以它一点也不安全 https://www.jb51.net/article/140422.htm
6.英语演讲即兴题目185个6篇(全文)5、先说明优势和劣势,让后说同意建一个工厂 (1)工厂能够吸收附近很多人进行就业,对地方的经济有很大的贡献 (2)建立工厂能够促使附近其他的商业发展,例如小商店,药店等等,这可以大大方便附近的居民 (3)建造工厂,赢利后,就可以向当地政府贡献税收,政府可以利用这些钱改善社区的服务 https://www.99xueshu.com/w/fileder02p0h.html
7.雅思作文模板优缺点出国留学For instance, (2) 举例说明优势之一。Besides, (3)AAA 的优势之二。 Nowadays, (4) 举例说明优势之二。In addition, (5)AAA 的优势之三。On the negative side, (6) 此处填入 AAA 的劣势之一。For example, (7) 举例说明劣势之一。Also, (8)AAA 的劣势之二。Furthermore, (9)AAA 的劣势之三。Allhttps://www.eol.cn/waiyu/yasi/164658.html
8.iOS创建属于自己的公开库2、使用CocoaPods管理第三方库的优势 1、我们可以避免上诉的问题,使用方便。 2、方便我们自己管理,只需要更新版本就行了,以前的库还可以保留让他人使用。 从这一刻我教会你如何创建属于我们自己的公开库 Everybody,follow my footsteps,let's start together! I will show you something amazing! https://www.jianshu.com/p/d9e312caea25
9.解读20座跨链桥及4种跨链技术范式–比特币行情外部验证的优势和劣势与原生验证刚好相反,外部验证的多链适配成本较低,其缺点是引入新的信任假设,假设外部验证人通过是 m-of-n 投票机制来达成共识,我们需要恶意串通的验证人数量不能超过 n-m。如果我们想要降低信任假设,那就需要验证人做抵押,这带来的是跨链的成本的增加。 本地验证尽管具备无信任假设、多链适配https://www.btchangqing.cn/394768.html
10.页面走丢啦~~Murphy'sBlog很高兴在这里遇到你,我是 Murphy,嵌入式软件开发工程师,从事嵌入式物联网相关工作。 + 我属于沉闷、不善言辞的类型,很理想化的一个人,不过也能跟熟悉的朋友打成一片。我自己希望可以是一个能放下伪装和偏见,以更加开放的心态看身边的一切,做最真的自己。 + 俗话说,独行快,众行远,希望可以通过这个平台认识自己https://github.com/murphyzhao/blog/commit/62c4c34973108b510747da40d8e44ced11cbf574.diff