百度:嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
以我个人的理解,嵌入式是那种需要把程序烧写到芯片中,通过芯片控制硬件实现特定功能的系统。
嵌入式软件工程师所做的事情便是在芯片上进行程序编写,根据产品的需求编写逻辑及数据采集和处理以及输出等。嵌入式软件一般采用的编程语言为C语言,有些地方会要求有汇编语言。为什么需要用C语言,因为C语言是接近底层的语言,当然汇编是更加接近的语言。但是汇编语言编写复杂,因此在实际应用中,人们并不直接使用汇编语言进行编程,而是使用相对高级的语言C。C语言有一个好处便是在硬件上运行时,速度快。只有在一些特定的环境下,比如芯片的启动代码(cstartup)、初始化芯片内存、直接操作PC指针等情况下人们才会优先考虑汇编,否则,几乎都是C语言。因此,可以说,嵌入式软件工程师就是C语言程序员。
对应的,还有嵌入式硬件工程师。他们的主要工作便是电路板的设计。一个产品比如智能单车车锁。一个简单的动作,比如手机APP解锁。当你扫描二维码解锁时,产品后台会通过短信向产品发送信号,电路板上的短信接收单元接收到短信后,会进行处理并将信号传给主控芯片,主控芯片进行相应的逻辑判断,验证短信正确后从芯片引脚输出高/低电平,高/低电平经电压转换电路(可能转换成5V也可能转换成12V)输送给继电器开关,继电器控制开关动作,实现单车锁的解锁。实际产品中可能会和上面的描述不一样,但是大致原理是相似的。嵌入式硬件工程师便是设计电路板,设计原理图、PCB板图,从而实现产品的功能。
想成为一个合格的嵌入式软件工程师,下面几项是必须要牢牢掌握的:
- 指针
这是嵌入式中使用最为广泛的知识点。复杂点的工程几乎所有的函数在传递变量时不会直接传递变量,而是传递变量的指针。这样做有什么好处呢?好处便是这样做是直接操作内存。
举个例子:
我们知道代码中定义的变量都是有内存的。比如 int a = 3;
我们定义完之后,编译器会自动向芯片ram区申请一块区域放置这个数据。比如申请到的ram区的地址是 0x00016。这个时候,在这个区域存放的数据便是3。可以想象成0x00016是一个门牌号,在这家门口挂了一个框子,框子里装的是3。 如果我们传递指针时,直接操作内存相当于芯片直接去寻找0x00016这个门牌号,然后把框子里的3替换成其他数。这样首先提高了代码执行效率,其次避免了在变量传递过程中有可能导致的错误。 - 基本语法
这个是基本功。 - 单片机原理
这个不多说,你需要了解单片机的组成,包括CPU、串口、数据总线地址总线、ADC、时钟、AHB、定时器等等的概念及基本用法。因为在嵌入式编程中,除了编写应用层的代码之外,你还需要设置芯片的时钟(主控频率)、定时器(实现一些中断)等。 - 读懂芯片手册的能力
每个嵌入式软件工程师都是针对一款特定的芯片进行编程,这时候你需要时间与这个芯片打交道,你需要读的懂芯片手册,知道在你需要更改一些芯片操作的时候应该怎么配置。 - 看懂硬件原理图的能力
嵌入式软件工程师不是光和软件打交道,有时候你需要根据硬件来配置串口IO等。这就需要你懂得硬件原理图。当然,有些时候在调试软件功能时还需要你去焊接一些信号线,这就需要更加了解图了。
参考自https://blog.csdn.net/dongtuoc/article/details/78072618