我曾经在都汽车电子厂家从事过几年的汽车电子的研发,软件和硬件都有涉及。
为国内的几家合资车的新上市的车辆研发遥控中控以及车身控制系统。
主要功能包括车灯控制(比如,大灯,位置灯,顶灯,转向灯的开关检测以及逻辑控制),门锁的检测以及控制(包括RF遥控控制以及开关的手动控制),还有雨刮控制,车速检测,20km自动上锁,CAN,LIN通信等功能。
这些基本上都不直接涉及人身安全,我们国内没有哪一个汽车电子厂家能涉及出涉及安全的控制系统,比如发动机控制系统,助力转向系统等,不能研发不出来,而是没办法保证可靠性。受囿于国内的研发机制以及急功近利的心态。
那些声称可以研发,是对顾客生命的不负责任。
这些安全件不是几个工程师随便鼓捣就能出来的,需要包括物料、研发、测试、生产等环节长期系统性科学化的验证。
对于没有CAN,LIN通信功能的遥控中控功能由于功能简单,运算量小,选用了8位,最高主频为8MHz的microchip的PIC系列处理器,如PIC16F1936,该系列处理器最大优点是抗干扰性能好,但是ROM,RAM资源非常有效,运算效率也非常低,一条指令周期需要4个时钟周期,不支持硬件乘法,做乘法操作可能需要耗时上百毫秒。
多数产品采用c语言编写程序,通过PICC编译器编译成机器码。
编译出来代码有的时候有些冗余,执行效率不能达到最优。
为了达到最优的执行效率,有时会在c语言中嵌套汇编代码。
比如遥控信号接收的程序,遥控信号采用3E码进行编码,接收程序需要以100us左右的周期在中断程序检测遥控信号输入,如果用c语言编写,大概100us可能要占用50us以上,还有不到一半的时间处理其他逻辑,而如果嵌套汇编进行处理,则仅需要30us语言。
遥控数据采用数据编号进行滚动加密,避免被人空中截获,破解或者重发攻击,而数据解密进行大量移位运算,非常耗时,因此也用汇编语言编写解密代码。
对于功能要求很强大一点,比如有LIN,CAN通信功能的控制器,我们选择ROM/RAM资源更丰富,运算速度更快,来自于freescale的8位处理器DZ96,以及16位处理器DZ128。
由于性能得到了提升,所有代码都用C语言开发,没有在嵌入汇编代码。
考虑到实时性自己可靠性的要求,所有控制器都没有基于freeRTOS,linux等操作系统开发。
这都是几年前的事情了,这几年电子技术飞速发展,32位cortex-Mx的单片机以极高的性价比横扫一切,以前大行其道的PIC系列处理器应该已经慢慢退出了历史舞台。
我想现在CAN,LIN总线应该成了标配,车上的电器状况可以轻而易举通过诊断仪以及行车电脑进行诊断,所谓的汽车电子维修变成了诊断工具的使用以及元件替换,越来越没有技术含量,变成单纯的体力劳动。