从事汽车电子软件开发需要什么知识?
https://m.toutiao.com/is/JV6txD6/
随着SDV(软件定义汽车)概念的提出, 大家都认识到了软件在汽车电子领域的重要性,各大汽车主机厂纷纷成立了软件研发中心并争夺软件开发人才。上汽集团在今年年初成立了上汽软件中心(后改名为零束),长城汽车成立了诺博、诺创、诺博,还有很多OEM也成立或者扩大了各自的软件研发中心,这里都不赘述了。
总之,这对从事汽车软件开发的同僚们是很大的利好。2019年大家经历了汽车销量下滑带来的零部件供应商效益下滑,2020年的疫情对汽车行业来说更是雪上加霜,好在从9月份开始汽车销量迎来了不错的增长,给我们汽车电子从业者们带来了更多信心。未来随着SDV的进一步推进,以及汽车新四化的逐渐开展,对软件开发人员的需求也会进一步增加。
啰嗦了这么多就是想给正在或者想要从事软件开发的大家一点信心,提升自己的开发技能、做好自己的开发工作,未来大有可为。下面回到本文的主题,想要从事汽车软件开发需要掌握哪些技能,本文讨论的scope是单片机软件开发,关于带有操作系统的Soc软件开发我们以后可以讨论。
- 首先要对单片机(MCU)的基本构成有一个了解,如果是计算机或者电子信息相关的专业,大学应该都学过一门叫做“微机原理”的课程,那这一步就可以跳过了。如果没有学过这门课,可以自己买一本单片机原理的书来看一下,对单片机的各个组件(什么是ALU、RAM、ROM、寄存器等)有个基本的了解。
- 接下来就是C语言编程知识了,C语言是你和MCU进行沟通的语言,通过C程序告诉MCU你要它完成什么工作(比如通过一个端口输出一个PWM)。C语言的强大之处是可以直接操控硬件,大部分操作系统都是使用C语言来编写的,包括你每天都会使用的Windows系统和Android系统(部分组件是用汇编来写的),从世界编程流行语言排行榜上,常年霸占榜首就可以看出C语言的重要程度。相信大部分人大学应该都学过C语言这门课程,因为现在不管是不是理工科的专业,利用编程解决问题的思想还是有必要学习一下的。如果你没有学过C语言也不要方,可以自己买一本C语言的入门书籍来学习,掌握C语言的基本语法即可,更多的编程技巧可以在单片机编程的过程中强化学习。网上比较推荐《C Primer Plus》这本书来入门,本人没有看过这本书,不作评价,感兴趣的朋友可以先了解一下,再决定是否选择它作为入门书籍,鉴于目前国内的翻译水平参差不齐,英文没问题的话可以直接阅读原版。进阶的话有《C和指针》,《C陷阱与缺陷》。
- MCU虽然很强大,但是如果只有一个MCU没有相关的外围电路它也干不了什么事情,因此我们需要能看懂和MCU交互的外围电路的原理图。比如现在让你通过MCU来控制一个LED的亮灭,首先你要看一下电路上这个LED连在了MCU的哪一个端口上了,如此你才知道通过控制哪个端口的电平状态来点亮和熄灭该LED。其次还要看一下端口输出什么电平可以点亮LED,同样的输出什么电平可以熄灭LED。我们举一个例子来说明,下图中的RGB_RED是连接到MCU的一个端口上的,通过该端口来控制红色LED的亮灭,那么如何点亮这个红色的LED呢?我们看到RGB_RED接到了一个NPN型(什么是NPN和PNP自行百度查阅)三极管的基极上(1),当端口RGB_RED输出高电平时集电极(3)到发射极(2)就会导通,红色LED的一端是5V(P5V0),另一端是GND,此时就会有电流流过红色LED,红色LED就会被点亮;相反,当端口RGB_RED输出低电平时集电极(3)到发射极(2)截止(不导通),就不会有电流通过红色LED,红色LED就会熄灭。真实的项目中除了控制LED的亮灭外,还要控制LED的亮度水平(白天亮度需要更高,夜晚亮度低一些),此时就要用到MCU的PWM(脉冲宽度调制)功能了,PWM其实就是一个频率和占空比可以调节的方波,通过调节占空比的大小(0%-100%)来调节LED的亮度。原理也很简单,调节占空比其实就是调节加在LED上面的电压:假设最大电压是5V,那50%占空比对应的就是2.5V,输出的电压和占空比是一个线性的关系。
- 有了上面的这些基础就可以开始简单的MCU编程了,推荐想要入门的同学可以买一个MCU开发板(最好带有CAN、LIN、SPI、I2C这些常用通信接口),开发板上有丰富的外围电路设备以及编写好的程序例程,跟着这些例程可以快速地掌握相关的开发技能。想要从事汽车电子领域的MCU软件开发工作,还需要掌握该领域内常用的一些通信接口,比如和整车其他模块交互的CAN、LIN网络,以及MCU和板上资源交互的I2C、SPI等串行通信接口。这些内容可以在具体的例程项目中去学习,也不是一朝一夕的事情,需要大家沉下心去钻研。
赞 (0)