IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。原文为:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。
嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
(此定义来源于百度)
个人认为,嵌入式就是约等于人工智能。能够自己处理信息的系统设备。
嵌入式人才的要求
基本要求 在某些招聘软件上,我们搜索“嵌入式开发”,常常会发现这样一些字眼,比如需要什么什么学历以上,多少年的工作经历,能否接受加班,是否善于沟通,是否具有较强的分析和解决问题的能力等等
专业要求嵌入式开发只是一个大类,要是真要说你是嵌入式开发做什么的,那可多了去了。但真要你说你是做什么的,无非就是你会什么。比如你会什么语言,C/C++/java还是pytho;是否精通自动控制理论自动控制理论又分经典控制理论和现代控制理论;是否精通DSP,RAM;是否精通实时操作系统,比如FreeRTOS,UCOS;是否精通多线程编程;是否精通嵌入式数据库的调用;是否精通各种网络协议;是否精通汇编;是否精通Linux内核,以及裁剪;是否精通各种硬件的板级支持包BSPD的编写;是否精通硬件原理图,精通PCB,精通安卓/ios应用开发等等等…
看到这里别说你们了,小编的头也大了,嵌入式开发本来就是一个需要很多基础的职业,起点很高,但真实工作中,真的要会这么多吗?其实不然,例如对于linux系统,你只要会移植就行了,真要你写一个操作系统,这得写多久?比如一些芯片,例如OLED,用软件IIC与主机通讯,再比如MPU6050,SPI与主机通讯,想要获得当前的姿态,编写这种板级支持包,其实很多大佬都帮你写好了,你只要能找得到,会用就可以了。MPU6050板级支持包,上千行代码,一般用到的,也就两个函数,获取欧拉角,获取陀螺仪的姿态。
1.从技术上来区分嵌入式一般就分为两种,有操作系统的和没操作系统的。
一般来说,没有操作系统,就比如用一个STM32C8T6芯片,电机驱动模块,MPU6050做一个平衡小车,这种我们就叫裸机。目前来说,由操作系统的是未来的主流。裸机,一般可以从程序上分为3层:硬件层、驱动层、应用层;有操作系统的可分为4层:硬件层,驱动层,应用层,比裸机多了一个系统层。
所以嵌入式的开发,一般分为:嵌入式硬件开发,嵌入式驱动开发,嵌入式软件开发,嵌入式系统开发。
硬件工程师,一般出身通讯、自动化、电子专业,需要熟悉电路,看得懂原理图,熟悉各种电子元件,有一定数电和模电设计开发的能力,熟悉八位机,十六位机,三十二位机中,也不能说什么都得会,八位机总得会吧。精通C语言,会使用Keil,Cubemx等软件。
有一些工资高的职位,还要你有FPGA的开发经验,精通一些设计工具,比如Proteus/Power PCB等软件
驱动开发,就是让你写一些设备的驱动,比如按键,让你写一个KEY的板级支持包,写KEY得有I/O口得初始化吧,得有按键得扫描函数吧,把这些函数写好,然后封装起来。这个可以有嵌入式硬件工程师来做,也可以有嵌入式软件工程师来做。
其实写驱动开发很多时候,都是靠移植,不会真有人自己写吧,不会吧不会吧~ 开个玩笑啦,有人喜欢自己写增加自己代码得编写能力,当然大多都是靠移植。
那么做嵌入式驱动工程师,你要会什么呢?
至少要精通八位机/十六位机/三十二位机吧?要掌握一些操作系统的知识,也不是说让你自己写一个操作系统,至少有一些操作系统里面的CONFIG.H中的配置函数里面的东西你要会用吧?内存分配,创建任务,任务挂起这些用的东西得会吧。精通不同芯片之间的移植,能够根据芯片手册,来编写设备得驱动程序。
如果设计到网络,比如只能家居,你通讯协议也得会吧,什么叫三次握手,TCP/IP协议是什么;物理层,链路层,网络层,运输层,应用层,每个层之间的关系得有点了解吧。
个人认为,嵌入式开发会与网络通讯的联系会越来越大,如果同学们在学计算机网络,一定一定要好好学啊~~
这个嵌入式软件开发,怎么说呢,最基本的要求,精通C/C++,精通C/C++。重要的事情说三遍,精通C/C++.如果没有操作系统,就在裸机上,程序不会太难。如果有同学们现在觉得,写程序好难,没有思路,是因为你接触的项目太少,经验不够,以后程序写多了,写代码就胸有成竹了。如果有操作系统,就和一般的软件开发很相似了,如果是搞软件开发的话,就需要掌握系统的API,精通C语言的高级编程知识,结构体,指针,指针数组,数组指针,各种库函数等知识。如果你想拿到更高的工资,数据结构是必须要会的,什么链表啊,二叉树啊;还要会用常用的算法,像PID控制,位置PID和增量PID,得知道原理和会用C语言来实现吧。
如果你觉得工资还是太低,想要更多的工资,还得会精通Linux系统下得程序设计吧,包括嵌入式开发环境,多进程和多线程,网络编程,网络协议;熟悉常用的图形库的编程,QT GTK miniGUI ;还得掌握各种通讯协议吧,掌握各种网络,音频,视频技术吧。小编在这一块也有很多不懂的地方,所以说的不好的地方请指出。
我个人认为这个系统开发是最难的。有读者看到小编说系统开发很难,就想放弃,其实不然,慢慢听我道来。
嵌入式系统开发工程师,做这一块,对于操作系统的熟练度是非常重要的,比如基本的内存管理,比如线程调度,比如文件系统,比如创建任务,还要了解数据结构,精通处理器体系结构,指令集,寻址方式等等
对于Linux,需要掌握的东西更多,也更难。要熟悉Linux配置文件的修改,内核移植,交叉编译,内核调式,启动程序,ROOT文件系统制作和集成部署,这要是真让你写起来,那困难程度可想而知,一般人或者说一般公司还真写不出来。最近不是很多华为用户更新了华为的鸿蒙系统吗,这个鸿蒙系统就是在Linux上写的,如果你要是能写操作系统,随便去哪一个公司,年薪百万,哦不,年薪千万不是梦。
既然说了一般人和一般公司没实力写操作系统,那嵌入式系统开发是干什么呢?一般情况下都是靠移植。举个例子,FreeRTOS,这是一个免费的实时操作系统,你要会移植,把裸机上的程序,移植到FreeRTOS上,然后你要合理的分配文件内存,任务调用,改善系统的实时性,稳定性等等。
总的来说,移植的难度比你自己开发一个操作系统简单很多很多了。现在集成度越来越高,一个系统的难度,设备,功能也会越来越多,东西一多,在裸机上跑就会很困难,所以操作系统一定是未来的趋势。
1.嵌入式从技术来分,分为有操作系统和没操作系统的,有操作系统的是未来的主流。
2.嵌入式从职业上分为:
一.嵌入式硬件u工程师
二.嵌入式驱动工程师
三.嵌入式软件工程师
四.嵌入式系统工程师
看得出来,嵌入式硬件工程师是最最底层的,通常要接触很多设备,同时还要精通电路图,和电路的设计。说的通俗一点,硬件工程师,把这个项目的各个设备把线给连起来,方便后面的程序编写。
嵌入式驱动工程师,就是写这些设备的驱动,你硬件工程师把线连起来了,你得编程吧,你就负责驱动这些设备的程序吧。有些项目,需要在操作系统上驱动设备,那你就要会用这个操作系统,在操作系统上,驱动这些设备,其实大多是都是靠移植。
嵌入式软件工程师,非常精通C语言,如果在操作系统上,还得精通数据结构和操作系统,也得会一些常用的算法,有点类似于,让你在安卓或者IOS系统下做一个APP。小编对于嵌入式软件了解的不是很多,有讲错的地方请指出。
嵌入式系统工程师,这个如果你很厉害,会写操作系统,那你工资是很高的,但也得付出很多的精力去学习。一般情况下我们都是靠移植,毕竟咋没有华为,苹果,谷歌的实力啊。
一般在大公司才会分的这么细,大公司做一个项目,每个人需要干什么会分的很细很细的。举个例子,你们公司要做一个扫地机器人,那么你或者你们这些人组成一个团队,负责扫地机器人的电机驱动的板级支持包编写。那你或者你们这个团队就是负责嵌入式驱动。
如果你在小公司,那就说不准了,老板肯定想你会的更多,这样子就不要招更多的人了,但小公司往往工资不比大公司少,毕竟能者多劳,但累确实挺累的。
如果读者们还是不清楚嵌入式是什么,或者说嵌入式想学什么,那么小编建议大家学习嵌入式先看一些数电模电,电子专业的书籍,有了一定基础之后,买一块51单片机开发板,从最简单的裸机开始学习,会是一个不错的选择,51单片机学的差不多了,做一个小项目。难一点的基于51单片机的蓝牙指纹开锁系统,简单一点的做一个基于51单片机温度控制系统。51都会了。在买一个32位的学习板,这个跟51比起来,要全部学会还是有点难度的,学的差不多了也可以考虑做一些项目,这个关于嵌入式的学习方向,我以后还会专门写一篇文章来介绍的。
本文部分标题和内容参考了大鱼机器人公众号 -> “你眼中的嵌入式”,文章写的特别好。
最后谢谢大家的点赞关注~❤