C语言基础:MBD与C语言

本文简单介绍一下博主对MBD与C语言的认识。

1 MBD中的C语言

1.1 MBD中使用C语言的原因

干汽车软件这一行的都知道MBD是基于模型的设计,通常就是用Simulink去搭建模型来实现控制算法。应用层软件开发工程师应该能够熟练掌握Simulink及代码生成工具链(但不一定十分了解C语言)。但是编译器是无法编译Simulink模型的,只能编译C代码。所以在编译前要用到Embedded Coder工具先把模型生成代码,然后再拿去编译。因此,C语言是MBD中绕不过去的一个话题。

1.2 MBD中使用C语言的场景

1)首先毫无疑问是在代码生成的时候和C语言密切相关。Simulink和Embedded Coder中的不同配置会导致生成的代码有所区别。所以集成工程师会对Simulink进行统一的配置,以保证团队中所有成员生成符合项目要求的相同风格的代码。这就要求工程师对模型和对应代码代码以及配置项做到心里非常有数。这里需要对C语言的语法规则、变量定义、文件定义等概念非常清楚。

2)在软件编译阶段,需要对C语言编译报错问题能够分析及定位。这里的编译是个广义的概念,包括预处理、编译、链接等操作,也就是从C代码到Hex文件的过程。软件编译的过程中,编译器会经常报错,告诉我们那个C文件的第几行报了什么错。这时候需要集成工程师有丰富的经验去将这些问题一一排查。如果不熟悉C语言,这工作就很够呛了。

3)代码相关静态检查方面,会报出一些代码的静态问题(静态问题指的是不需要测试用例,直接用语义分析就可以直到代码有什么问题,例如除零检查)。Polyspace或AQC软件可以对C代码进行静态检查,在HIL测试和试车试验前有效地排除部分软件bug。

注意,以上三种场景都只需要很基础的C语言能力,并且不需要直接手写C代码。

1.3 学习MBD中的C语言

在汽车行业的很多公司,体系流程与工具链比较完善,可以让应用层软件工程师脱离C代码直接使用Simulink设计控制算法。在这种情况下,博主依然认为有一定的C语言基础是很重要的。这对于工作业务的理解,以及与BSW工程师的协作都很有好处。

作为使用Simulink建模的汽车应用层软件工程师,MBD中用到的C语言不算很难。首先,我们不用去手写C代码,只会看Simulink生成的C代码,能读懂就行了。其次,生成的代码很多很长,不可能全看一遍,只会关注编译报错的部分或者检查出错的部分。最后,汽车软件中的C代码不会出现学校课本上那些奇技淫巧,比方说i++或者++i之类的代码。

看过我的其他博客就会知道,博主喜欢通过简单的模型生成代码,来研究C代码和模型、配置之间的关系。后续博客还会以Simulink作为我们的老师,通过他来学习更多的C语言的知识点。不过都比较简单,因为C语言其实只是一个过客,最终的目的还是用编译器集成软件。

另外,对于项目中的模型生成的代码,博主建议不要去一行行地阅读。如果一定要研究,只需要看一下头文件中对全局变量的外部声明和函数的声明即可。

2 手写C代码

2.1 使用C语言开发的场景

手写C代码的原因很简单,因为Simulink也有搞不定的开发业务。主机厂的电控开发业务基本都能用Simulink完成,例如动力总成控制、车身域控制、电机控制、电池管理等。手写C代码比较多的业务,应该就是ADAS(高级驾驶辅助系统)和AD(自动驾驶)。例如视觉感知的图形处理和机器学习,直接通过C代码实现更为方便,也有很多基础库。规划控制方面,例如A*算法,MPC算法等使用C语言实现更加简洁高效。

究其原因,博主认为是Simulink生成代码是通过TLC模板生成固定的格式。这使得其灵活性不高,而C语言可以灵活运用函数、数组、指针、结构体、循环,使得对于很多场景都有优势。

2.2 学习手写C代码

博主目前的博客基本都是关于Simulink与代码生成,对于手写C代码相关的内容很少。后续会像学习Simulink的方法一样去从零学习C语言,努力发展另一条技术路线。刚开始会用Visual Studio写C代码,重新回顾一下基础语法。通过结合一些工作经验,思考一下某个语法在什么工作场景中会常常用到。

在工作中很少有需要自己从头写一个算法的情况,大多数是需要移植一套成熟的C代码并且进行调试。即使是这样,博主也希望自己写一写代码,这样可以在实践中思考,把前人踩过的坑再踩一遍,从而得到提升。

另外,学习的过程中不希望找一本书从头到尾地去啃下来,这是十分痛苦的。而是在工作中遇到什么疑问和新的知识点,然后去书中、去互联网上寻找答案,最后总结在博客中。

3 总结

本文简单介绍一下博主对MBD与C语言的认识。

>>返回个人博客总目录

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值