(图片来源网络,侵删)
您对嵌入式系统有何看法?嵌入式的定义IEEE(电气电子工程师协会)对嵌入式系统的定义是:“用于控制、监控或协助设备、机械或工厂运行的设备”嵌入式系统是一种专用的计算机系统,是设备或设备的一部分通常,嵌入式系统是一个嵌入式处理器控制板,其控制程序存储在 ROM 中事实上,所有具有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统有些嵌入式系统还包括操作系统,但大多数嵌入式系统由单个程序来实现整个控制逻辑从应用对象上定义,嵌入式系统是软件与硬件的组合,还可以包括机械和其他辅助设备国内对嵌入式系统普遍接受的定义是:以应用为中心,以计算机技术为基础,具有可裁剪的软硬件,以满足应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统(此定义来自百度)我个人认为嵌入式大致相当于人工智能,是一个可以自行处理信息的系统设备嵌入式人才要求基本要求:在一些招聘软件中,我们搜索“嵌入式开发”,经常会看到这样的词汇,比如要求什么学历以上,工作经验多少年,是否可以接受加班,是否善于沟通,是否有很强的分析和解决问题的能力等等专业要求:嵌入式开发只是一个大的门类,如果真要说嵌入式开发是做什么的,选择很多但真要说做什么的,无非就是你能做什么比如你会用什么语言,C/C++/Java还是Python;是否精通自动控制理论,自动控制理论分为古典控制理论和现代控制理论;是否精通DSP,RAM;是否精通实时操作系统,比如FreeRTOS,UCOS;是否精通多线程编程;是否精通嵌入式数据库调用;是否精通各种网络协议;是否精通汇编;是否精通Linux内核与裁剪;是否精通编写各种硬件的板级支持包的BSPD;是否精通硬件原理图,PCB,Android/iOS应用开发等看完这些我就不说你们了,我也头疼嵌入式开发是一个对基础要求很高的职业,起点很高,但是真正工作真的需要懂那么多吗?其实不然比如说Linux系统,你只需要知道怎么移植就行了,如果真要写一个操作系统,要多久时间?比如说有些芯片,比如OLED,是用软件IIC跟主机通讯的比如说MPU6050,SPI跟主机通讯如果想获取当前的姿态,就需要写这种板级支持包,其实很多大佬都给你写好了,你只要找到用就行了MPU6050的板级支持包有几千行代码,一般只用到两个函数,获取欧拉角,获取陀螺仪的姿态区分嵌入式1、从技术角度来说,嵌入式系统一般分为有操作系统和无操作系统两种一般来说,如果没有操作系统,比如用STM32C8T6芯片、电机驱动模块、MPU6050做平衡车,我们就称这个为裸机目前操作系统是未来的主流裸机从程序上一般可以分为三层:硬件层、驱动层、应用层;有操作系统的可以分为四层:硬件层、驱动层、应用层,相比裸机多了一个系统层因此嵌入式开发一般分为:嵌入式硬件开发、嵌入式驱动开发、嵌入式软件开发、嵌入式系统开发嵌入式硬件工程师必备技能硬件工程师一般来自通信、自动化、电子等专业,需要熟悉电路,看懂原理图,熟悉各种电子元器件,有一定的数字、模拟设计开发能力,熟悉8位、16位、32位机,不能说什么都懂,但是必须懂8位机,熟练掌握C语言,会使用Keil、Cubemx等软件一些高薪职位还要求你有FPGA开发经验,熟练掌握一些设计工具,比如Proteus/Power PCB等软件嵌入式驱动工程师必备技能驱动开发就是给某些设备写驱动,比如按键比如你需要给某个按键写一个板级支持包,写按键需要初始化I/O口,扫描按键写完这些函数之后,还需要封装起来这个可以由嵌入式硬件工程师来做,也可以由嵌入式软件工程师来做其实驱动开发很多时候都是靠移植的,不会真的有人自己写吧?不会吧不会吧~开个玩笑,有些人喜欢自己写,增加自己写代码的能力,当然大部分还是靠移植的那么,要成为一名嵌入式驱动程序工程师,您需要了解什么呢?你至少应该精通8位/16位/32位机器吧?你应该对操作系统有一定的了解我不是说你必须自己写一个操作系统,但至少你应该知道如何在操作系统中使用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.嵌入式分为:1.嵌入式硬件工程师2. 嵌入式驱动工程师3. 嵌入式软件工程师4.嵌入式系统工程师可以看出嵌入式硬件工程师是处于最底层的,通常要接触很多设备,还要精通电路图,电路设计简单来说,硬件工程师就是把这个项目的各个设备连接起来,方便后面的程序编写嵌入式驱动工程师就是为这些设备写驱动,你硬件工程师就是接好线,写好程序,负责给这些设备写驱动程序有些项目需要在操作系统上驱动设备,所以你要会用操作系统,其实在操作系统上驱动这些设备,大部分都是靠移植嵌入式软件工程师对C语言非常精通,如果是做操作系统的,还必须精通数据结构和操作系统,还要知道一些常用算法有点像叫你做一个Android或IOS的APP我对嵌入式软件了解不多,所以有什么错误还请大家指出嵌入式系统工程师,如果你擅长写操作系统,工资会很高,但是也要付出很大的努力去学习一般来说,我们都是靠移植,毕竟我们没有华为、苹果、谷歌那样的实力一般只有大公司才会把事情分得这么细大公司做项目的时候,每个人会分得很细比如你公司要做扫地机器人,那么你或者你的团队会负责写扫地机器人的电机驱动的板级支持包然后你或者你的团队会负责嵌入式驱动如果你在小公司,那就不好说了老板肯定会觉得你知道的比较多,所以老板不会多招人不过小公司的工资往往不比大公司少,毕竟能力强的人会更努力不过确实很累如果读者还不知道嵌入式系统是什么,或者想学嵌入式系统的哪些方面,那么小编建议大家在学习嵌入式系统之前,可以先看一些数字电子学、模拟电子学、电子学方面的书籍在有了一定的基础之后,买一块51单片机开发板,从最简单的裸机开始学习,会是一个不错的选择当你把51单片机学的差不多了之后,做一个小项目比较难的基于51单片机的蓝牙指纹解锁系统,简单一点的是基于51单片机做一个温度控制系统51的你全部会了,再买一块32位的学习板,相比51来说,学全了还是有点难度的,当你学的差不多了之后,也可以考虑做些项目以后我会专门写一篇文章介绍嵌入式系统的这个学习方向本文部分标题及内容参考自大禹机器人公众号->《嵌在你眼里的》,文章写得非常好
0 评论