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

文章目录

  • 1 MBD中的C语言
    • 1.1 MBD中使用C语言的原因
    • 1.2 MBD中使用C语言的场景
    • 1.3 学习MBD中的C语言
  • 2 手写C代码
    • 2.1 使用C语言开发的场景
    • 2.2 学习手写C代码
  • 3 总结

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代码,重新回顾一下基础语法。通过结合一些工作经验,思考一下某个语法在什么工作场景中会常常用到。

后续拥有了一定的心得体会后,再回头更新此文。

3 总结

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

>>返回个人博客总目录

C语言基础:MBD与C语言相关推荐

  1. python有哪些软件包用来考察变量之间的相关性_Python语言基础考察点:python语言基础常见考题(一)...

    一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...

  2. c语言基础学python_D11——C语言基础学PYTHON

    C语言基础学习PYTHON--基础学习D11 20180908内容纲要: 1.RabbitMQ消息队列 (1)RabbitMQ安装 (2)Rabbits示例 模式一:fanout 模式二:direct ...

  3. R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...

    一.R语言简介 R语言是专业的统计分析软件,来自著名数据科学网站(http://www.kdnuggets.com/)发起的一个2019年统计分析和数据挖掘软件使用情况的调查结果: 表明R语言是该领域 ...

  4. c语言基础知识难点,C语言基础的几个难点解析

    [摘要]本文结合C语言的教学实践,讲解了C 语言基础知识的几个难点,是教学过程中学生较难掌握和容易出错的重要知识点.希望可以对学习C语言的读者提供参考,能更好地理解C程序设计的思想.编写出优秀的C程序 ...

  5. c语言基础知识选择题,C语言基础知识选择试题.doc

    C语言基础知识选择试题 1089 答案 :C 在下列设备中,属于输出设备的是( ). a:键盘 b:数字化仪 c:打印机 c:扫描仪 1018 答案 :A 在Windows98中,用户同时打开的多个窗 ...

  6. c语言基础知识入门(c语言基础知识入门代码)

    C语言怎么入门 初学C语言的基本 一开始 由算法开始,毕竟你以前学的算法和c有所不同 然后开始学程序流程控制 接着学内存处理机制 提高深入编程 然后与其他软件 如sql web 联系起来学习 后面的 ...

  7. C语言基础01——初识C语言

    目录 什么是C语言 第一个C语言程序:HelloWorld 初识数据类型 初识常量.变量 初始字符串.转义字符.注释 初识选择语句.循环语句 初识函数.数组 初识关键字 定义常量和宏 格式化输入输出 ...

  8. 有c++语言基础学python_D16——C语言基础学PYTHON

    C语言基础学习PYTHON--基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...

  9. C语言基础专业书,C语言程序设计基础

    C语言程序设计基础 (2017年清华大学出版社出版的图书) 编辑 锁定 讨论 上传视频 <C语言程序设计基础>是2017年清华大学出版社出版的图书,作者是贾学斌.宋海民.胡大威. 书    ...

  10. python常考题_Python语言基础考察点:python语言基础常见考题(一)

    一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...

最新文章

  1. fastbert解读
  2. Mac homebrew类似apt-get命令安装包
  3. python绘图课设_python课程设计笔记(三)turtle绘图库(海龟库)
  4. binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...
  5. Linux 常见命令之Find \; +结合其它命令使用案例详解
  6. 鸿蒙os2.0游戏体验,华为运行鸿蒙OS 2.0体验:界面近似EMUI 11
  7. 计算机PS英语词汇,操作计算机必读(必会)的53个英文单词共享
  8. C++类成员的访问权限以及类的封装
  9. 我们的年代《音乐天堂》经典回顾
  10. 计算机快捷键 英语,电脑中英文切换快捷键
  11. on call是什么意思_on call的翻译_音标_读音_用法_例句 - 必应 Bing 词典
  12. 静态HTML网页设计作品 DIV布局家乡介绍网页模板代码---(太原 10页带本地存储登录注册 js表单校验)
  13. 接入GoogleAnalytics 统计
  14. Springboot集成POI
  15. 聊聊Linux 五种IO模型
  16. 彻底卸载MariaDB
  17. 解决win7系统print spooler打印服务自动关闭、无法添加打印机
  18. 遨博机器人aubo_robot 包编译问题及解决方法
  19. 又一名视觉大牛从大厂离开!阿里达摩院XR实验室负责人谭平离职!
  20. 什么?你对新媒体运营感兴趣?来听听一年新媒体人的故事。

热门文章

  1. C语言——逗号表达式
  2. 网站外链到底应该怎么发布?
  3. python爬取百度学术文献搜索引擎_通用爬虫探索(一):适用一般网站的爬虫
  4. github下载的几种加速方法
  5. 快逸报表日志文件的配置方法
  6. 计量经济学笔记之OLS回归的推导
  7. UEFI - VTF
  8. 如何擦除计算机连接网络的记录,彻底清除网络浏览记录的六个方法 -电脑资料...
  9. python爬图片_python爬虫(爬取图片)
  10. Unity制作二次元卡通渲染角色材质——2、色阶化光影的多种做法对比