先说说各个子行业都是做什么的。其实这些年来,计算机技术已经渗透到了生产生活的各个角落,除了电脑之外,随便检查一下,在你的身边可能到处都是计算机控制的装置。你掌中的手机、脚下的电动平衡车、家里的冰箱、空调、洗衣机、智能门锁、台灯、甚至乘车卡等都包含了计算机控制单元。还有随处可见的监控摄像头、工厂中的自动生产线更是如此。你的全部身份信息、银行账户、社会保险信息也都是存储在计算机系统中的。你手机中的APP属于移动开发子行业,银行账户及社会保险的管理系统属于行业管理软件子行业,汽车、冰箱、空调、洗衣机内部控制系统属于嵌入式系统开发领域。
嵌入式开发领域主要开发各类产品的控制内核。如果用人体来比喻的话,我们的四肢是实际完成工作的器官,眼睛耳朵是用于感知外部信息的器官,大脑是指挥中心,会根据眼睛耳朵收集到的信息不断进行判断,然后形成合适的指令下达给四肢,从而完成工作,嵌入式开发的程序就是产品的大脑。以空调为例,实际完成降温的是压缩制冷机构,它可以运行在不同制冷强度上,实际完成制冷动作。空调还配备测温装置,用于测量室内温度,这可以看做是感觉器官。然后就是我们的控制核心了,现代空调都会有一个小型的计算机控制系统,因为它是空调整体的一部分,不是单独电脑那样的形态,所以称之为嵌入式系统。当我们在控制面板上输入希望达到的温度时,这个目标温度会被保存到嵌入式计算机中,而嵌入式计算机的工作就是不断的通过测温装置获取当前室内温度,对比目标温度,调整控制压缩制冷机构的运行强度,从而将室温控制在预设的温度。
嵌入式系统开发的工作不仅包括编写控制程序,还包括设计控制电路,所以在技术工作上一般是分为硬件工程师和软件工程师两大方向。实际工作中,硬件工程师要了解一些基本的系统软件编程知识,软件工程师也要能看懂电路原理图,看懂主控芯片和涉及到的外围芯片的技术手册。嵌入式软件开发对从业者的技术能力要求是比较高的,首先要对计算机的基本原理熟悉,对时钟、中断、内存管理、系统上电加载过程、各种主要的外部设备连接总线都有比较深入的理解,同时还要对C语言做到精通,因为嵌入式软件开发目前基本上还是C语言的天下。
嵌入式领域其实还可以进一步划分为单片机开发、嵌入式Linux开发、FPGA开发等细分领域,其中的差别也是比较大的。单片机的核心芯片一般不具备虚拟内存管理功能,成本较低,大多是基于裸机或者实时操作系统编程的。例如早期的intel芯片、目前流行的STM32系列芯片等,用于控制对时间要求较高的产品,如家电、工业控制等,是嵌入式应用最广的部分。
嵌入式Linux开发一般应用于手机、平板、车载娱乐中心等领域,因为Linux免费开源,所以目前已经占领了绝大部分消费类电子产品的市场,包括安卓手机的底层操作系统就是Linux。这部分包括系统编程和应用编程,系统编程主要是配置修改Linux内核代码,使其运行在自行设计的硬件产品中,大部分工作是编写驱动程序,例如显示驱动、存储驱动、USB接口驱动等,因为这部分驱动代码是和硬件方案紧密相关的。应用软件开发一般包括UI框架、系统通用服务框架,例如推送通知服务等。例如小米手机的MIUI就是一个UI框架。嵌入式Linux开发的系统开发需要对Linux操作系统内核编程熟悉,尤其是要精通驱动开发。应用开发要熟悉Linux应用编程,一般要掌握C语言编程。
FPGA的全称是现场可编程门阵列,本质上更加接近于硬件数字电路设计,使用的编程语言编译后实际上生成的是芯片的电路设计。在集成电路尚未广泛应用的时代,电子产品的电路板就是由二极管、三极管、电阻、电容、变压器等基本元器件通过导线连接组成。功能相似的电路单元在不同的设计中反复出现,例如模拟信号滤波器,或者信号放大器等。
随着技术进步,人们把这些可以复用的电路单元统一包装成集成电路芯片,这种趋势越来越强大的结果是,目前电路芯片的集成度非常高,基本上一个单片机芯片就可以单独构成一台计算机了(所以叫做单片机)。可是很多时候我们还是希望向从前的日子那样,有充分的自由设计专用的电路,还想要控制在很小的电路空间中(要知道现在的数字电路系统动辄百万级以上的元器件),于是FPGA就出现了。你可以在这个FPGA芯片上实现你自己的数字电路系统设计,目前比较热门的领域是将人工智能的算法通过硬件电路实现,这要比软件实现快非常多,这个领域更近似于芯片设计。
这一篇就先说这么多,继续聊一下其他领域,敬请期待。