汽车软件与大家常见的计算机软件有很大的不同。
具体差别在:
汽车ECU软件的主要功能为物理量的测量和控制、监测和诊断及实现设备之间的通信。
简单的微控制器应用软件可以不依赖于操作系统而单独运行。这些软件一般是无限循环的形式,例如循环测量传感器的测量数据、进行数据处理以及根据测量结果对执行器进行控制。这种情况下应用软件直接对硬件进行控制,读取测量数据或者根据内部时钟执行定时性的任务。
当软件的复杂度增高时,对硬件直接编程的方式就会变得不再适用。程序人员在实现某种应用时,不能够专注于软件算法,而是必须要分散注意力,考虑对基础的硬件编程。另外,像在特定的时间启动特定的程序等一些基本功能,对于不同的硬件来说无论是发动机电控单元还是电子稳定程序(ESP)电控单元都是相同的。所以一些独立于硬件的重复性的任务要依靠一个共同的软件层来实现这个软件层就是操作系统。
ECU软件的基本架构如下图:
基于操作系统运行的应用软件,不再直接和硬件交互,而是通过操作系统的呼叫或中断来完成任务。只有在完成一些实时任务时,应用程序才直接和硬件交互。但随着性能的提升,这种直接交互越来越少见。未来的趋势是尽量避免应用软件和硬件的直接交互。如今的个人计算机的硬件控制也是完全通过操作系统来进行的,这就是为什么一些老的依赖硬件运行的游戏不能兼容如今的操作系统的原因。
除了软件之外,电控单元中需要用到不同的参数类型,例如“当前的冷却液温度”这一类参数为变量,而“最高许可冷却液温度”这一类参数为常量。
电控单元需要严将常量和软件进行分离。程序人员可以在软件程序中用代码#define
TEMPCOOLMAX(C语言语法中,本句用来定义TEMPCOOLMAX的值为
C语言中常常使用相似的句型来定义常量。)来定义冷却液的最高许可温度为℃
随后如果整车厂确定的最高温度实际上是℃时,需要对软件进行修改,将常和软
件分离的一个优势在于,零部件供货商可以对其软件进行加密,而整车厂可以有足够的
自由度来针对其车型设定参数以及进行调试。参数设定的过程称为标定。
总之,软件结构一般分为三层:操作系统、应用软件和参数。
下图为基于硬件的三层软件层架构。除此以外,微控制器的OM中也存储了一些专用程序。防止私自改变设置(Chiptuning)的各种方法和软件也都存储在ROM中。ROM中还集成了引导加载程序,用于设置硬件出厂后是否允许软件以及许何种软件加载到硬件上。这种测试虽然不直接和微控制器相关,但当硬件重新启动时,微控制器的自检也可以扩展到此类测试。
操作系统和软件都写入闪存中。由于闪存(FlashMemory)的速度比内存(RAM)要慢,在启动之后,对于速度要求很快的软件和操作系统要首先被读入到内存中。永久性的数据存储在闪存中的独立区域。
常量也存储在闪存中,变量则存储在控制器的内存中。
另外,还有一些特殊数据,虽然是变量但在发动机起动几次的过程中要进行存储。例如,当汽车熄火时,整车自检数据会在下次汽车起动时进行分析;由于防盗锁止系统需要利用变化的编码,这些编码在熄火之后也要进行存储;一些出错信息,甚至需要存储到下次去修理厂做汽车保养的时候才能被维修人员用专用的设备读出。类似的存储一般使用EEPROM,出于空间以及成本的考虑,EEPROM一般采用串行接口和微控制器进行通信。EEPROM也可以利用闪存的一部分进行仿真实现。