聊聊汽车ECU中单片机开发

当今汽车的电子化程度越来越高,最明显的就是车载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中单片机开发的难点,受限本人经验不够丰富,观点难免有些片面,单片机开发的难点应该还有不少。文章内容是我个人项目经验总结的难点,希望能够给不熟悉的朋友带来一些参考。


文章首发于上汽零束开发者论坛, 论坛ID: 程序猿司晨

ps. 欢迎关注微信公众号【程序猿司晨】,汽车专业野生程序员一枚,分享汽车软件技术和个人成长经历。 技术栈:嵌入式Linux、车载网络通讯协议、Adaptive Autosar…
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值