AUTOSAR入门-工具链与方法论

图片

“**方法论**”这个词来源于哲学,感觉很高大上,我之前做软件都**没听说过**这个词,做汽车软件才听说。可见是被AUTOSAR工具链软件提供商**包装**出来的名词,高大上了不少。了解后发现这不就是个**配置软件**么?我们在[AUTOSAR入门-AS平台工具命令和目录介绍](http://mp.weixin.qq.com/s?__biz=MzUzMDMwNTg2Nw==&mid=2247483790&idx=1&sn=ae04e2a46de5ae6d2a1a45744273fab1&chksm=fa5287aacd250ebcfec7ec06466d7e8ab36579d8ed33335f266a8e0e168aeeeab5bc91f247be&scene=21#wechat_redirect)中**2. scons studio**启动章节,介绍了AS代码中的这个**配置软件**,当然AS里面的这个工具链软件是比较简陋的,但是好处是**开源的**,你可以看到其完整的运行原理。本文就来说说这个配置软件怎么工作起来的。

 **1. 方法论**

    我们在[汽车电子构架演进(二)AUTOSAR的组成和演进](http://mp.weixin.qq.com/s?__biz=MzUzMDMwNTg2Nw==&mid=2247483852&idx=1&sn=49cd09d2e0c1905cd19b9c71355f4cf5&chksm=fa5287e8cd250efe6a0c73971950de6f79fe0658dd087aaab28e6fd5e2d5873363bf1ba94498&scene=21#wechat_redirect)中**3.AUTOSAR方法论**

中提到了AUTOSAR方法论。这里我们从**非软件人员**看下什么是方法论。

1.1 方法论的哲学原理

方法论是一个非常**哲学****化**的词汇和概念,经常会在各类马克思政治理论中发现它的身影。以马克思主义哲学的观点来看,**方法论**和**世界观**是分不开的,人们关于“世界是什么、怎么样”的根本观点是世界观,用这种观点作为指导去认识世界,那么改造世界就需要使用到方法论。方法论是人们用什么样的方式、方法来观察事物和处理问题。概括地说,**世界观**主要说明世界“**是什么**”的问题,**方法论**主要说明“**怎么办**”的问题。

定义:方法论是一种以解决问题为目标的理论体系或系统,通常涉及对问题**阶段、任务、工具、方法技巧**的论述。方法论会对一系列具体的方法进行分析研究、系统总结并最终提出较为**一般性的原则**。

1.2 方法论与客观世界的联系

图片

把一件事情从**现象**上升到**逻辑**,再上升到**方法**,再到**一整套方法体系**,这个过程,就是“方法论”。

这4个层次分别为**现象层,逻辑层,方法层和方法论层**,4个层次是**层层递进**的过程。现象层就是直观看到的**客观世界**,从客观世界出发,经过观察和分析,我们能够获得其中的**逻辑**,此时就到了逻辑层面。当你经过客观世界到逻辑层面时,你会总结和发现其中的方法,并且方法只是**孤立的方法**,仅限于此时此地使用,这个方法不具备稳定的应用环境,此时我们已经处于方法层。那么,方法从何处来,他是从方法论中针对某个特定应用环境而推导出的一个方法,同时,你会在多个特定应用环境的方法中发现一些共通的规律和原则,在不断总结和提炼的过程中,形成了能够**自成体系的集合**,我们就到了方法论层。
  1. 2.AUTOSAR方法论

图片

AUTOSAR设计和开发流程分为**三个**阶段:**系统配置**、**ECU设计与配置阶段**、**代码生成阶段**。

第一阶段:定义系统配置文件,这是系统设计者或架构师的任务。包括选择硬件和软件组件,定义整个系统的约束条件。AUTOSAR通过使用信息交换格式和模板描述文件来减少初始系统设计时的工作量。系统配置的输入是XML类型的文件,输出是系统配置描述文件,系统配置的主要作用是把软件组件的需求映射到ECU上。

第二阶段:根据系统配置描述文件提取单个ECU资源相关的信息,提取出来的信息生成ECU提取文件。根据这个提取文件对ECU进行配置,例如操作系统任务调度,必要的BSW模块及其配置,运行实体到任务的分配等,从而生成ECU配置描述文件。该描述文件包含了特定ECU的所有信息。

第三阶段:生成代码,是基于ECU配置描述文件指定的配置来产生代码、编译代码,并把相关代码链接起来形成可执行文件。

  1. 3.数据结构与算法
看了上面说的,感觉被**忽悠**晕了不。在计算机科学里面的说法就接地气多了:**程序=数据结构+算法**。不管多么高深的哲学概念,就是数据和运算数据的算法就这么简单。

这里的方法论**扯了一大堆**,其实就是把汽车的业务抽象成了程序中的数据模型,然后利用界面软件可以配置这些数据模型,高级一点的工具还可以做一些验证,比如配置是否冲突,是否正确,帮助人去检验配置。

下面介绍点计算机专业本科**四大专业课**之一《**数据结构**》的知识,再回看这个方法论,真是玄而又玄,**给外行看**的玩意了。另外说一点,说嵌入式门槛高,就是这四大专业课的知识都不可缺少,而且需要基础打的很牢固,这一点就是科班和非科班的区别,你学透彻了这四门课,秒变科班,自行百度是那几门。

下面带大家一块回顾学习下《数据结构》的基础知识,这在进行软件开发中是最基本的东西。

数据的逻辑结构:元素之间的相互联系为逻辑结构。

四种类型:集合线性结构树形结构图状结构或网状结构

数据的逻辑结构有两种形式:线性结构非线性结构。线性结构有一个前驱和后继,非线性则有多个。

图片

数据的物理结构:数据元素在计算机中的存储及其逻辑关系的表现。

包括顺序存储结构和链式存储结构。

逻辑结构和物理结构的**区别和联系**:逻辑结构是从逻辑关系角度观察数据,与数据从存储无关,是独立于计算机的。存储结构是逻辑结构在计算机内存中的实现,是计算机处理的逻辑。  

图片

数据的运算:

建立、消除、访问

插入、删除、修改、查找、排序

算法特性:有穷性、确定性、可行性、输入、输出。

不是所有的计算机程序都是算法,一个程序是对一个算法的具体语言实现。

一个好算法的标准:正确性,可读性,健壮性,通用性,效率与存储量需求

效率就是算法的时间复杂度存储量就是算法的空间复杂度

算法的时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数,其时间度量记做T(n)=O(f(n))

多项式:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)

指数:O(2n)<O(n!)<(nn)

指数远远大于多项式级别的复杂度

算法的空间复杂度:是指算法编写成程序后,在计算机中运行所需存储空间大小的度量。记作:S(n)=O(f(n)),一般的算法的空间复杂度是指的辅助空间。

  1. 4. AS中工具链

  2. 图片

    商业的工具链比如Vector的比较复杂,而且我们看不到其源码,不过从其生成的代码来看,那叫一个糟糕,简直不是人看的,生成的代码乱七八糟,但是目前市场上商用比较成熟可靠的就是Vector的,我猜这东西就是靠测试,经验修正的。就是车上用的越多,出现问题越多,修正问题越多,越稳定,商业上是成功的,但是由于软件不开源不知道里面是否用了形式化验证的科学东西,还是就是纯经验编程,拆东墙补西墙搞的。反正看生成的代码是乱成一锅粥了,到后期会越来越难维护

    商业的工具链像是一个航空母舰,但是我们看不到源码。我们有一个小破船,就是AS里面的scons stuio这个工具,虽然简单,但是可以用。尽管功能不强大,但是核心的界面显示和生成代码机制很值得学习借鉴。

4.1 界面显示

我们运行scons studio的时候,见[AUTOSAR入门-AS平台工具命令和目录介绍](http://mp.weixin.qq.com/s?__biz=MzUzMDMwNTg2Nw==&mid=2247483790&idx=1&sn=ae04e2a46de5ae6d2a1a45744273fab1&chksm=fa5287aacd250ebcfec7ec06466d7e8ab36579d8ed33335f266a8e0e168aeeeab5bc91f247be&scene=21#wechat_redirect)中2. scons studio启动分析,**python+QT**的代码会根据as.application/common/autosar.arxml 来生成代码,例如在PduR中

图片

跟界面是对应的

图片

4.2 修改生成代码

点击Generate

图片

查看代码,在studio.py中

图片

mGen函数如下:

图片

在studio.py的开头有:from argen.ArGen import *

在ArGen.py中有:

图片

这里可以参考AUTOSAR入门-AS开源代码编译过程详解中2.3 arxml生成LCfg文件

4.3 arxml****生成LCfg文件

具体到PduR模块,会调用

as/com/as.tool/config.infrastructure.system/argen/GenPduR.py

生成PduR_PbCfg.c和PduR_PbCfg.h和PduR_Cfg.h,生成的位置在:

as/build/posix/x86/ascore/config

其中PduR_PbCfg.c是一个全局变量

图片

两个.h文件里面是一堆的宏定义函数声明:

图片

4.4 代码中引用

代码里面会用到生成的文件,这里看下这个**全局变量**,算是**配置**。就作为一个**全局结构体变量**在**代码里**面直接使用,例如在PduR模块中接收SoAd模块的报文要传给Dcm的时候会去全局变量找目的地,代码如下:

图片

这个PduRconfig就是全局变量。

4.5 数据结构分析

**可见我们上面说的数据结构知识****基本******都没有用上**,用的编程**技能很少**。**生成的代码主要分为两部分:**宏**和**全局变量**。宏在编译的时候预处理生效,就相当于简单的字符串替换。全局变量主要为结构体数组,然后结构体套结构体,嵌套很多层。逻辑上是**线性结构**,物理上是**顺序存储**。

下面分析下其优缺点

全部的配置都要常驻内存,都是全局变量,不是动态生成释放的,造成内存空间的浪费。但是另一个角度看,**越浪费越稳定**,都是独占的资源,随时用随时有,不会因为动态分配造成无法分配的风险,也增加了值的可靠性。

所有的数据都是直接按照线性结构直接存放的,这样在编译之后,烧录到板子上,这些配置数据也是在一块的,可以实现PostBuild configuration,就是可以用工具直接改存储里面的配置数据,因为可以定位到其位置。这里也没有数据库的概念,也没有配置管理的概念,程序里面的全局变量直接就是配置,真是**豪横的浪费**啊。浪费硬盘也就算了,那玩意不值钱,这还直接要**浪费内存**,这东西可贵了去了。很多产品做cost down主要就是挤压内存。

这里我想起来一个概念操作系统:操作系统(OS)是一个软件,它帮助用户和应用程序使用和管理计算机的资源。换句话就是要**榨干电脑的所有资源**,提高资源利用率就是OS的重要目的。可惜这个AUTOSAR CP算是一个单片机程序,里面还没有严格意义上的OS。目前AS中的代码,工具链将内存资源都是预先分配好,以全局变量的形式存在的。

见[汽车电子构架演进(二)AUTOSAR的组成和演进](http://mp.weixin.qq.com/s?__biz=MzUzMDMwNTg2Nw==&mid=2247483852&idx=1&sn=49cd09d2e0c1905cd19b9c71355f4cf5&chksm=fa5287e8cd250efe6a0c73971950de6f79fe0658dd087aaab28e6fd5e2d5873363bf1ba94498&scene=21#wechat_redirect)中**4\. AUTOSAR从CP到AP过渡 中静态和动态的**说明。鱼与熊掌不可兼得,静态就是稳定,动态就是节省资源。两手都要抓,两手都要硬。有一种高级境界叫做:**动中有静,静中有动**,就是**Hypervisor虚拟化**,如下实现了**动静共存**:

图片

后记:

AUTOSAR**开源代码**的学习,还得靠各位读者自己调试打log学习了,目前先写到这里,后面要拓展下**OS方面**的研究,敬请期待。如果对**汽车软件**感兴趣的朋友,这里可以加我微信**thatway1989**,备注**进群**。然后拉你进本公众号的交流群:OS与AUTOSAR研究-交流群,可以讨论汽车软件最新技术,一起学习。

Talk is cheap,show me the code,后续会继续更新,纯干货分析,无广告,不打赏,欢迎转载,欢迎评论交流!

往期见话题:AUTOSAR入门
公众号:“那路谈OS与SoC嵌入式软件”,欢迎关注!

个人文章汇总:https://thatway1989.github.io

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐