当今汽车的电子化程度越来越高,最明显的就是车载ECU越来越多,汽车绝大部分功能都需要ECU的参与。如果从功能来看,不同功能的ECU看似没有任何联系。那么,这是否意味着不同的ECU开发完全没有共性呢?
答案当然是否定的,今天从技术角度来聊聊汽车ECU开发。从个人观点出发, 我将ECU开发简单分为单片机开发和嵌入式开发。
单片机也就是常说的MCU,汽车行业多使用瑞萨的芯片进行开发,比如RH850芯片。MCU上一般运行RTOS,对于汽车行业来说,OSEK OS是最为常见的操作系统。
OSEK OS属于实时操作系统,,熟悉RTOS系统的都知道,RTOS内部没有进程、线程这类概念,而TASK才是其基本运行单位。MCU运行的TASK在初期设计阶段确定,且每个TASK运行的时间和运行顺序也是确定的。如果考虑到任务优先级,高优先级的任务在运行时会抢占低优先级的任务。
上面介绍了单片机开发的基本知识点,接下来说说我认为单片机开发中的难点:状态机设计和中断处理函数。
ECU在运行时可能会有多种状态,而每种状态则要求执行不同的处理,因此设计状态机时需要考虑到ECU所有可能的状态、每种状态需要执行的操作,以及状态迁移的条件等。
以电源管理为例,ECU有sleep,standby,wakeup三种状态。如果ECU从wakeup进入到sleep状态,那么此时要求必要数据保存到flash中,所有的task要停止运行,某些硬件需要下电,ECU不再接收CAN消息,电流需要降低到某个规定值等等。
一旦电源管理状态机设计有bug,那么ECU的行为就可能出现异常,比如无法睡眠、睡眠电流过高、严重的可能会导致损坏等等。上面只是举了一个简单的例子,电源管理的状态机也没有这么简单,由此可见状态机的设计难度之高。
单片机开发的另一个难点是中断处理函数。中断和芯片有关系,可以在芯片手册中查看到中断向量表,程序员可以编写对应的中断处理函数。如果中断被触发,则程序查询中断向量表,并跳转到对应中断处理函数。但中断处理有时候会导致程序卡死或行为异常。
如果中断处理函数中处理的变量被某个函数或者TASK使用,那么中断触发后,变量发生改变。如果这个变量被某个状态机使用,那么有可能
汽车ECU开发难点

本文探讨了汽车电子控制单元(ECU)开发中的两大难点:状态机设计与中断处理函数。通过对电源管理状态机的设计举例说明状态机的重要性及其复杂性,并讨论了中断处理函数可能引发的问题及解决方法。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



