完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
当今汽车的电子化程度越来越高,最明显的就是车载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中单片机开发的难点,受限本人经验不够丰富,观点难免有些片面,单片机开发的难点应该还有不少。文章内容是我个人项目经验总结的难点,希望能够给不熟悉的朋友带来一些参考。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1175浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:53 , Processed in 1.167588 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号