汽车软件到目前还是一种嵌入式软件,嵌入式软件有领域的特点,汽车软件和其他嵌入式软件的开发有所不同,其特点有:
- 大量使用moto芯片
- 大规模使用simulink
- 大量使用CAN通信
- 标定功能是标配
- 不使用通用的操作系统,如linux,即使是常见的实时操作系统也很少使用,如vxworks,ucos等
- 主要开发人员都是机械类专业背景
对于传统汽车,汽车软件设计就是控制器软件设计。控制器是用来控制汽车部件的,传统汽车的部件都是复杂的机械系统,没有对机械原理的良好了解,无法开发控制算法,所以很容易理解第6点,为什么过去的汽车软件开发人员大部分是机械类出身。
接着第5点的原因也可以就此引出。由于一个控制器控制一个汽车部件,一个控制器上就运行一个程序,强调实时性而不是多任务,对操作系统的要求不高,反而操作系统越简单实时性越好,所以大部分控制器供应商选择自行开发专用的底软(不一定是操作系统),相较于使用通用操作系统,专用底软不仅能提高性能还能降低成本(操作系统免费而且对硬件要求低)。
机械系统控制算法的参数很多都是无法直接确定的,需要试验得到,所以各大汽车零部件商都很重视标定功能的开发,汽车软件的标定功能是领先于其他嵌入式领域的。这是第4点的原因。
CAN通信在很多工业领域也会用到,但是说到行业内的普及率还是汽车为最。CAN通信在今天已经遇到很多瓶颈,但是在汽车总线刚刚出现的时候很好的兼顾了成本和性能。这是第3点的原因。
正如前面所说,研究算法的人大部分是机械类专业出身,他们不懂编程,虽然采用了标准库的C语言写汽车控制算法并不难,但是测试这些算法需要搭建一个比算法复杂得多的物理模型,用C完成这部分工作对他们来说是一个难题:算法工程师可以把控制系统拆成一个个小模块并用C函数复现,但是不懂如何把C函数串起来;而专业的C语言工程师能够把C函数串起来,但是不知道为什么这么做,也不知道如何去观察。所以很早以前一个算法的开发需要算法开发者精通C语言或者和C语言工程师紧密配合。而simulink诞生之后,这一切都不需要了,它把后者的工作全包了,算法工程师再也不需要担心测试环境的搭建,全图形化的界面的学习几乎是零成本。算法的开发和测试基本可以由算法工程师一人完成,开发效率提高,开发成本降低。同时也带来一个新问题,就是算法不能直接使用还要C语言化。这就需要自动代码生成,由于定点化的问题这部分工作还需要人的参与。这就是汽车软件界言必simulink的原因。
至于第一点,这是个历史问题,不过为什么不是arm呢,因为汽车对芯片的那点功耗还是承担得起的。
to be continued….