c语言哪个编译软件能够将整个工程自动生成调用图_【科普】整车控制器-软件篇...

ffcae6d5cc364498b77bc5411029e964.png

b16c13e461f55d61380646852be67030.png
希望关注本专栏的朋友,也能一并关注微信公众号。

原文地址:【科普】整车控制器-软件篇

本期内容依旧属科普性质,希望能用最简单的例子和语言,介绍下控制器中软件部分涉及到的知识点。文中的内容可能跟各位现在用的架构不太一样,【思想】就抛砖引玉,各位老铁有什么想法都可以随时进行后台轰炸。

!文章最后一样有VCU开发资料送出!

1.IDE

不管哪方面的编程,嵌入式、Windows程序、还是网页,离不开敲代码的环境——IDE。在嵌入式开发中由于还有硬件的参与,还需要额外的调试工具——仿真器

集成开发环境(IDE,IntegratedDevelopment Environment )由芯片厂商推荐或提供,用于嵌入式程序开发。通常IDE会包含以下功能:代码编辑器、程序编译器、程序刷写及嵌入式程序的调试工具。常见的IDE有飞思卡尔使用用的CodeWarrior、Arm使用的Keil等。

c3ea8577e61307cbd491a187e7ef1d9a.png

如上图,是飞思卡尔使用的CodeWarrior。工程师的大部分时间都会用来编写嵌入式C语言代码。所以,一款强大的IDE必然会有一个强大的代码编辑器,代码编辑器中还有通过不同颜色区分不同的关键字、自动补齐代码等人性化功能!

当前的嵌入式程序开发都使用的是C语言,偶尔还会出现汇编与C语言的混合编程。这就需要IDE提供一个功能强大的编译器,将代码编译成嵌入式使用的二进制文件。

2.仿真器

仿真器在嵌入式开发中角色是无可取代的,它的功能是配合IDE进行使用实现MCU程序的烧写与调试。仿真器的类型有很多,每一款芯片也能匹配很多种仿真器,如ARM能够使用J-link、ST-Link、U-Link等;飞思卡尔则能够使用USBDM、PE仿真器等。仿真器的价格跨度也很大,越官方的仿真器功能越强大,同样价格也越贵。

15db6fde57b933e921b024113754ef8d.png

以上的PE仿真器,价格就非常高。因为价格的门槛,不可能每个应用工程师人手一个,所以一般只有嵌入式工程师才能拥有。所以应用工程师刷写程序、测量与调试还有其他途径来替代,后续还会有相关介绍。

be415b53f51b9a658eb1f215f7f65daa.png

以上是CodeWarrior自带的调试工具,工程师可以直接在IDE中调试MCU中正在运行的代码,实现测量与断点调试。

3.软件架构

软件部分是整个控制器的灵魂!同一个硬件运行不一样的软件就扮演不同的角色。运行整车控制程序的控制器叫VCU、运行变速箱控制程序的控制器叫做TCU,等等。每个厂家都会根据自身的情况设计符合自己需要的架构,下面介绍的软件架构比较粗糙,可能跟大家正在用的有点不一样。欢迎大家在后台讨论与交流。

2c7e79895aff5deae634f8c8cc577071.png

以上部分是精简过后的功能框图。MCU中包含两大部分的程序:一个是Bootloader,另一个是主程序。MCU根据记录在EEPROM或DFLASH中标志信息,判断当前上电后要运行主程序还是Bootloader。

4.Bootloader

很多人看到Bootloader都会比较陌生,不知道干嘛用的。简单的说就是用来给控制器刷程序用的,不同于仿真器在IDE中直接刷程序,Bootloader刷程序是通过CAN或其他通讯方式,从上位机下载程序并烧写ROM。

67f8d6c35ddc5c2314cc4e597945c400.png

具体过程比较复杂,后面【思想】会单独用一篇文章来介绍这东西。看到这很多人要问:既然仿真器可以烧程序为什么还要整一个Bootloader,前面【思想】也说过,仿真器的价格比较贵不可能人手一个。还有另一个原因就是方便,如果在整车上操作可以直接通过ODB刷程序,就不用拆整车控制器连接调试口了!

​当然,如果应用工程师不注意,把Bootloader搞坏了,控制器成砖头了,还是要请仿真器出山的!

5.主程序

主程序就是正常情况下控制器运行的程序,也是实现所有控制逻辑的核心!

BSP

BSP板级支持包(BoardSupport Package)是介于硬件和应用程序之间的一层。作用大致有三:

一、控制器片内与片外资源的初始化,如:PLL锁相环配置、CAN波特率配置、初始化EEPROM、SPI、IIC等;

二、处理控制器不同信号类型的输入与输出。如:获取ADC输入、CAN/LIN报文的收发、IO口的输入与输出等;

三、片内外资源的通讯,如:EEPROM/DFLASH的读写、SPI与IIC的收发;

任务调度

任务调度对于整个主程序来说扮演着时间管理的角色!

2ebd8a81eae822c186f8258ef3d2474c.png

对!你没看错就是时间管理!优秀的男人不能只有一只手机,同样的一款优秀的控制器程序也不能只运行一个任务!通过任务调度,实现主程序中是要运行标定、测量还是应用程序。另外,还需要根据不同的任务周期调配应用程序的资源;

标定

在科普什么是标定前,【思想】需要介绍一下什么是EEPROM/DFLASH,通常MCU中的RAM中运行的数据在掉电后就会丢失,而ROM中的程序代码是不允许被修改的。那我们要如何实施保存运行的数据?这就需要一类掉电后仍然可以保存数据的存储介质,方便理解的话,我们可以把它类比为普通电脑的硬盘!

那为什么要标定呢?举个例子!每款车型都会区分高中低配,比如高配用的是17寸轮胎、低配用的是16寸的轮胎。工程师开发程序肯定是只会做一个程序,车辆下线时候通过标定工具将不同的轮胎尺寸写入EEPROM。

dc7b0bee06b94c55967e349eedac8c95.png

与Bootloader一样标定功能也是需要上位机程序的支持,上位机的标定工具通过XCP/CCP协议把数据通过CAN发送到控制器并写入EEPROM中。

测量

测量功能是方便应用工程师调试程序,可以对Simulink中的任意节点进行测量。

21781eeb9f90b88e4e1d753c851c1c09.png


Simulink代码生成的时候可以选择是否生成A2L文件,A2L文件中会包含Simulink各个节点的变量名等信息。在刚生成的A2L文件中每个节点的ECU_ADDRESS=0x0000。

13b671ffefdbeb1306abe270c0572aac.png

我们需要一个脚本程序把A2L文件中的ECU_ADDRESS替换为MCU内存MAP中的对应地址上。如:A2L中Out_F_RequestSourceAddress在内存中的地址为0x24FD。

通讯方面与标定一样,也需要XCP/CCP协议的支持,工程师可以根据的需要,通过上位机用轮询的方式向控制器请求选中节点的数据达到测量的目的。

写到这大家有没有发现测量与Bootloader可以取代仿真器的大部分功能!!!总结一句:仿真器是厂家亲生的,Bootloader与测量功能是用户野生的。

应用程序

这部分内容就是大家所说的控制策略了,这里就是应用工程师们进行各种骚操作的地方了。如果看过【思想】前面文章的老铁应该对这个图很眼熟。

5fbb030ab70e529bc4bad9022db38311.png

这图片就是文章《Simulink代码生成应用教程》中的插图,大部分内容在之前都有介绍大家可以关注下以下内容:

1、Simulink中浮点数的优化表示法

2、嵌入式C语言中CAN报文字节序问题的处理方法

3、嵌入式C语言环境下的CAN总线通讯协议

4、Simulink代码生成提高教程

6.预告与福利

整车控制器的软硬件部分都已经介绍完了,打了两期嘴炮可能不少人要抱怨【思想】是光说不练!

e0e6759c94e85669c7e57dc5ffd75142.png

后面打算演示下把之前《AVL-CRUISE纯电动仿真策略提高教程》中介绍的纯电动车仿真策略做成嵌入式程序!敬请期待!!!

e76f02773ebae956249ebae51e1259d5.png

顺便演示下【思想】自娱自乐造的一些轮子!

剩下的就是福利时间了!

阅读公众号原文《【科普】整车控制器-软件篇》可获整车控制器资料包!

f4bb635cabf1ab1a9f457a8763f4d6d9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值