嵌入式_嵌入式软件工程师 - CSDN
嵌入式 订阅
嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统作为装置或设备的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。 展开全文
嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统作为装置或设备的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
信息
应用于
工业、国防
标准制订
IEEE
中文名
嵌入式系统
外文名
Embedded System
嵌入式嵌入式系统组成
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成, 嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。(1)嵌入式微处理器 嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。嵌入式微处理器的体系结构可以采用冯·诺依曼体系或哈佛体系结构;指令系统可以选用精简指令系统(Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。RISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。据不完全统计,全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系有ARM、MIPS、PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。(2)存储器嵌入式系统需要存储器来存放和执行代码。嵌入式系统的存储器包含Cache、主存和辅助存储器。1、CacheCache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是一段时间微处理器使用最多的程序代码和数据。在需要进行数据读取操作时,微处理器尽可能的从Cache中读取数据,而不是从主存中读取,这样就大大改善了系统的性能,提高了微处理器和主存之间的数据传输速率。Cache的主要目标就是:减小存储器(如主存和辅助存储器)给微处理器内核造成的存储器访问瓶颈,使处理速度更快,实时性更强。在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。2、主存主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。常用作主存的存储器有:ROM类:NOR Flash、EPROM和PROM等。RAM类:SRAM、DRAM和SDRAM等。其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。3、辅助存储器辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户的信息。嵌入式系统中常用的外存有:硬盘、NAND Flash、CF卡、MMC和SD卡等。(3)通用设备接口和I/O接口嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、I2C(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。 [1]  [2] 
收起全文
精华内容
参与话题
  • 嵌入式Linux驱动教程(韦东山2期)

    万人学习 2018-11-30 11:01:24
    1.没有废话,句句都是干货!学习后保证可以跟着视频完成相应的实验。 2.现场从0编写/调试工作中的绝大部分驱动,内容--- 理论 +
  • 一线工程师告诉你嵌入式真实现状与发展前景

    万次阅读 多人点赞 2018-10-08 22:57:11
    个人说明:本人并不是年薪百万的技术大牛,但总算是一名合格的嵌入式工程师,现在某企业担任嵌入式软件工程师开发一职,以下观点可能会带有片面或者分析不全,但却是一名一线企业嵌入式软件开发者真实感受和所得,...

    个人说明:本人并不是年薪百万的技术大牛,但总算是一名合格的嵌入式工程师,现在某企业担任嵌入式软件工程师开发一职,以下观点可能会带有片面或者分析不全,但却是一名一线企业嵌入式软件开发者真实感受和所得,希望能帮助那些有需要的人,我明白年轻人出来打拼都不容易。

    为何要写这片文章?小生也是过来人,踩过你们踩过的坑

    百度搜索“嵌入式”、“嵌入式开发”、“嵌入式发展前景”等字眼,出来的都是一大堆培训机构,出来的都是一大片他们所谓的对嵌入式行业的“见解”,不否定其内容有一定的专业性,但其中“水份”我想大家比我更清楚,“卖瓜赞瓜”的道理谁都懂;或者出来的是几年前的“嵌入式状况”,与当今嵌入式环境相比,企业无论是在开发、用人、内容、市场上都发生了很大的改变。因此,作为一名一线企业嵌入式软件工程师的我,想通过自己的实际经历理性地评论当今嵌入式行业的真实状况。本文章写于2018年10月1日,小生不才,自认为可以反映当今嵌入式行业的一个真实状况,以及它的科学性和前沿性可以是2018-2020年期间嵌入式的定义。

    一.嵌入式的定义和举例分析

    官方定义:

    根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监控或者辅助设备、机器和车间运行的装置”。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

    目前国内一个普片被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

    说白了就是先设计硬件,然后根据需求编写能在该硬件上运行的软件,就成了所谓的“智能硬件”。

    或者说得还不够明白,那行,我们说一说具体的嵌入式产品有哪些,嵌入式是做什么的:

    传统嵌入式产品:空调主控模块、冰箱主控模块、家用遥控器、智能手机、教学投影仪、音响系统、雷达系统、路由器等等

    前沿嵌入式产品:无人机、智能音响、机器人控制、城市天眼系统、智能家具、自动驾驶汽车、扫地机器人、小米手环等等

    一起看一些前沿的嵌入式产品:

    下面是大疆无人机,可应用在高空拍摄、军事侦查、高空作业、自动巡逻、农业工作、矿业勘测、地形测绘等方面

    下面是天猫精灵智能音响,可进行语音识别、对话交互,应用与娱乐、生活、购物、智能家具控制等方面,属于新一代音箱

    下面是百度机器人,通过深度学习、神经网络等算法,实现“百度大脑”,具有自学习、自训练能力,如最强大脑的小度机器人

     下面是自动驾驶汽车,自动驾驶是一个前沿的科技,在我国还没本真正实施,不仅是技术方面,它还得得到政府支持和认同

    下面是海尔扫地机器人,能够自动巡逻,自动绘制室内地图,自动避障,自动清洁地面,还你一个干净的环境

    下面是小米手环3,可显示微信、来电等消息内容,振动闹钟,心率计算,步数统计,实时运动数据查询,睡眠质量监测等

    看完这些前沿科技产品后可发现,这些形形色色的“高端产品”都离不开嵌入式技术,离不开传感器技术,离不开软件程序。那么我现在可以告诉你,嵌入式开发的工作就是去开发以上等一系列产品 ,这就是嵌入式,相信此刻你对嵌入式行业已有“形而上学”的了解。

    二.嵌入式工程师在企业工作的真实内容

    嵌入式软件开发具体可以分三类:

    嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指Linux上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。业界对驱动人才的定义是三年才算入门,可见此门槛之高。

    嵌入式系统工程师:主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。

    嵌入式应用工程师:编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念,需要很强的学习能力,该职位也是各大公司需量最大的,一般10人的开发小组,驱动开发与系统开发与应用开发的比例是1:2:7。

    根据我的经验,世界上可以分成两种嵌入式工程师,一种是大公司的嵌入式工程师,另一种是小公司的嵌入式工程师,我知道这样分类很不妥,但并非毫无道理,请听我一一下概述:

    大公司:大公司的特色是什么?答案:人多!

    人多导致的后果是什么?答案:项目分工非常细,都遵循“术业有专攻”这一哲学道理;

    例如职位是嵌入式驱动开发,那么大公司可能还会细分嵌入式显示屏驱动工程师、嵌入式音频驱动工程师、嵌入式电源驱动工程师等;这就是大公司一贯的作风,它希望去培养某一方面的人才;说白了就是如果你分配到的是一个显示屏驱动项目,那么有可能你这一年内都是在开发显示屏驱动,一年后你将是显示屏驱动方面的一个小专家;在大公司记住一点,你做的东西都是很“精”的;同时,大公司的薪资水平和福利也是相当可观的,有完善的晋升路线,离职率一般不高。

    小公司:小公司的特色是什么?答案:人少!

    人少导致的后果是什么?答案:项目分工不明确,什么都得干,它给你灌溉的思想是“小陈,我们培养的是综合性人才,在这里你就是全栈工程师”;

    估计很多人都没听明白,意思是说这里人少活多,你什么都得干。小公司才不会管你是嵌入式驱动工程师还是嵌入式应用工程师(有的公司还是区分的,的确不能以片盖全),反正是活你就得干,分分钟前端后台服务器你都得给我干,不要跟我说什么没学过,没学过就去学呗。小公司还有一个特色就是:“节奏快”,大公司里面可能开展一个项目会花上几个月的时间或者更长,在小公司是不存在的,领导都是指望着你几天或者两三周完成,那你也只能说呵呵了。的确,在小公司你可以得到飞速的进步,很强的综合性技能,前提是比人家花出更多的时间,把每一个项目理解清楚,而不是应付心态。坚持下来,两年后必能独当一面。小公司提供给应届生的薪资水平相对与到大公司来说要低,其福利不完善和晋升路线也一般比较模糊,所以小公司的离职率会比较高,经常出现两年三跳的情况。

    还有一个经验分享给年轻人:无论哪种语言,程序代码只是一个简单的工具,最后真正留下的只有原理、协议、框架、思维。

    三.嵌入式发展前景与当今状况

    目前的嵌入式开发更倾向于智能化,也就是我们所说的智能硬件(硬件+软件),从现在各种前沿的嵌入式产品来看的确如此,嵌入式产品的一个发展趋势是更倾向与自动化控制和人机交互,而不是强调“算法”这一块,要区分你仅仅是一名嵌入式工程师而不是算法工程师,什么一大堆“人工智能”、“阿尔法狗”、“深度学习”、“神经网络”都不需要深入理解,那是研究生、博士生做的,小生并不是说你的能力不足,而是“术业有专攻”,这并不是一名嵌入式工程师的工作量,你需要做的仅仅是与他们的“云端大脑”进行对接,调用他们API就完事了。

    由于人工智能、深度学习、神经网络、区块链、大数据等先进学科的崛起,很多人都产生质疑:“嵌入式还有发展前景吗”?这个问题我在这里可以很肯定地告诉你:“嵌入式有很好的发展前景,前沿嵌入式技术即将崛起,或者说已经崛起”。的确,人工智能、大数据这些学科会给嵌入式带来冲击,就目前来看,大学生更倾向与python编程语言、机器学习这一块,而嵌入式学者的确比往年有所下降,但学者少了并不代表他的需求就少了,并不代表他的薪资水平下降了,目前的一个嵌入式技术更倾向于与智能学科相结合的趋势,以百度机器人为例,机器人的核心是大脑,即是“数据和算法”,但机器人大脑想机器人身躯能够像人类一样活动,能说会道,行走自如,那么就必须得依靠嵌入式技术,这就是我所说的嵌入式+智能学科应用,从长久来看,嵌入式只会越来越火,智能学科的崛起必定带动新型的嵌入式技术发展。

    对于发展前景,有一项更重要的参数,那就是当今嵌入式软件工程师的薪资水平,我下面给出一些理性的数据,是从各大招聘平台调研而来:(数据只能作为参考,具体薪资还是得看个人修为,有的达不到该薪资水平,有的早已超过该薪资水平)

    非211、985院校应届毕业生平均月薪:8k

    是211、985院校应届毕业生平均月薪:12k

    一年工作经验者月薪:10k-15k

    二年工作经验者月薪:12k-18k

    三至五年工作经验者月薪:20k-30k

    上述数据只针对那些“真正努力”的嵌入式工程师,不适合应“应付式工作”的嵌入式工程师,同时声明不对该薪酬水平负任何责任。

    四.展望人工智能带动前沿嵌入式技术

    人工智能给嵌入式带来的冲击,是福也是祸,人工智能实现智能化无处不依赖嵌入式技术,人工智能学科在不知不觉中带动嵌入式技术革新,从一系列智能产品,包括无人机、智能音响、机器人控制、城市天眼系统、智能家具、自动驾驶汽车、扫地机器人、小米手环等等,有哪个不依靠嵌入式技术来实现,并没有,人工智能越是想向人类表达他的智能水平,越是要依靠嵌入式技术,所以前沿嵌入式技术更倾向于嵌入式+智能学科的发展,当智能学科真正崛起,嵌入式必定又是一次浪潮与技术革新。

    展开全文
  • 嵌入式开发(一):嵌入式开发新手入门

    万次阅读 多人点赞 2020-10-09 16:38:41
    本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。 嵌入式开发流程一般如下,一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建嵌入式开发环境及...

    本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。

    嵌入式开发流程一般如下,一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式板卡上运行。

     

    1. RS232串口接孔图解

    串口,一般也指COM接口,传输速度较慢,适合远距离传输。这里用于主机与嵌入式版之间的数据通信,一般用于指令下发等。按照协议标准还分为RS-232-C、RS-422、RS485等。其中RS-232也是最常用的串口,称为标准串口。下面仅介绍RS-232的的接线图。RS232串口为9针接口,分为公头与母头,PC机上的串口一般为公头,如下图。

     各个针孔功能如下:

    最简单的串行接口需要的信号线是2数据发送(TxD)3数据接收(RxD)和5信号地(GnD) ,只需要接通这3根线即可实现上位机PC与嵌入式板的通信,如下图:

     2. 上位机与嵌入式板串口通信工具

    一般使用SecureCRT工具进行上位机与板卡通信。

    (1)串口连接

    打开快速连接

    协议选择Serial,端口与波特率根据实际情况而设置,

    点击连接,弹出新窗口,敲回车键,出现以下界面表示上位机与板卡连接成功。

    (2)使用Telnet连接

    Telnet连接就是使用网络(即网线)实现PC机与板卡通信,而不需要串口。

    Tlenet新建连接,选择Telnet协议,主机名是板卡的ip。

     点击连接,弹出新窗口,输入用户名和密码:

     

    3. 上位机与嵌入式板卡实现文件传输

    在SecureCRT中使用命令ifconfig查看板卡的ip地址:

    将上位机PC与嵌入式板卡用网线直接连接,将PC机的本地连接ip地址改成与嵌入式板卡同一个网段,例如:

    在上位机中打开tftpd32工具,在Server interface中选择上位机与嵌入式板卡相同网段的ip,如下:

    注意之类PC机是作为TFTP协议的服务端,板卡作为客户端。

    将文件从上位机下载到板卡,在SecureCRT中输入以下命令:

    tftp -g -r 1080P.jpg 192.168.1.100

     这里-g表示从PC下载文件到板卡,-r表示远程服务器(即PC)的文件, 1080P.jpg表示要传输的文件,后面的ip地址就是PC机的IP地址,例如:

    输入以上命令后,板卡在当前目录下即收到该文件。如果需要在某个目录下接收文件,需要切换到该目录下,再输入以上命令。

    将文件从板卡传输到上位机,在SecureCRT中输入以下命令:

    tftp -p -l 10801P.jpg 192.168.1.100

    这里-p即推送的意思,-l表示本地(板卡)的文件。

     

    4. 常用Linux命令

    • 回到根目录:cd /
    • 解压文件:tar -xvf data.tar
    • 删除文件: rm -f 1.txt
    • 改变目录的读写权限:sudo chmod 777 /usr/share/themes

                 说明:这里777表示每个用户都可以读写,后面设的是路径

    • 重命名:mv aaa.h264 bbb.h264

                 说明:将aaa.h264重命名为bbb.264

    • 查看ip地址:ifconfig
    • 查看文件属性:stat sample_nnie_main
    • 查看当前路径:pwd
    • 创建文件夹:mkdir
    • 更改ip地址:ifconfig eth0 192.168.6.111  (重启后会丢失)

    (持续更新)

    5. MP4、AVI等转换为*.h264格式

    在嵌入式系统中,程序往往无法直接解码mp4,avi等格式视频文件,需将其转换为裸流.h264格式,方法如下:

    PC上下载ffmpeg工具,切换到ffmpeg.exe的目录,用cmd打开命令行窗口:

    .mp4转.h264:

    ffmpeg -i 1920x1080.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 1920x1080.h264

    .avi转.h264:

    ffmpeg -i 160x120.avi -vcodec h264 -s 160*120 -an -f m4v test.h264

    mov转h264

    ffmpeg -i test.mov -vbsf h264_mp4toannexb -vcodec copy -an 2.h264 

    即在ffmpeg目录下生成所需格式的文件。

    展开全文
  • 课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置...
  • 嵌入式开发到底有多难?

    万次阅读 多人点赞 2018-03-13 21:57:33
    譬如,在今年的开发者大调查中,我们发现有34%的开发者面临嵌入式软硬件开发的困难,几乎占了开发者面临困难的三分之一强。数据来源:2017中国软件开发者大调查嵌入式软硬件开发都是坑? 那么,嵌入式软硬件开发真...

        每年,全球最大的中文开发者社区CSDN都会进行一项开发者大调查的活动,这个涉及全国几十个地区,吸引上万名开发者参与的大型调查活动每次都会得出一些有趣但很重要的结论。譬如,在今年的开发者大调查中,我们发现有34%的开发者面临嵌入式软硬件开发的困难,几乎占了开发者面临困难的三分之一强。

    嵌入式软硬件开发都是坑?

        那么,嵌入式软硬件开发真的就那么难么?我们来看看知乎上的问答:

        一篇《嵌入式的坑在哪方面?》的文章,获得了26个回答,242条点赞。在这篇文章中,列数了嵌入式软硬件开发中的两个坑:

    1,需要学习大量的软硬件知识。不仅需要学习Java,C++等编程,要深入底层,汇编,算法数据结构等等都要了解,硬件方面就更多了,电容电阻,模电数电、PCB,各种大小,功率信号完整性。做DSP的,还要知道算法仿真,数学理论、还需要考虑硬件设备,一些芯片的编程还要考虑电路结构,电容大小。调试上面,还需要外接设备,还要看懂示波器,频谱等等。

    2,各种硬件平台的生产力工具不统一。编码,编译,调试,烧录…各个方面都是大坑。使用的语言,操作系统平台,芯片性能也不统一。作者表示,最多的时候,电脑上有5个编译环境,还不包括自己学习用的环境。

        而在另一篇获得了59个回答,695人的点赞的文章,《嵌入式真的是个大坑。被逼转行?》里,作者建议开发者尽量选择嵌入式开发,尽量不要选择小众,过于专业化的平台,要上大众通用平台,系统性学习,而这种通用的平台才是一个开放的,系统的,资源源源不断的平台,这才是能够真正学到本领的平台,对开发环境和平台本身的理解也会远远超过DSP的。否则,最后可能只能是被逼转行。


    填上软硬件开放的坑

        实际上,老孙再看完这两篇文章后觉得,开发者在嵌入式软硬件开发中遇到的这些坑,本质上是因为选择了不合适的芯片平台,如果在决定做嵌入式软硬件开发开始,就选择到了正确的芯片平台,那么,前面所说的这些坑,就会自然而然的烟消云散。不信,您往下瞧。

        譬如,如果开发者选择了AMD最新推出的基于高性能x86”Zen"架构的霄龙3000系列和基于”Vega“架构显卡的锐龙V1000系列嵌入式处理器,开发者就可以愉快的在简单易学、耳熟能详的RedHat,Ubuntu等基于Linux的操作系统以及Windows上进行轻松的嵌入式软硬件开发。霄龙3000和锐龙V1000的产品系列为开发者提供了非常强大丰富的软件生态系统,尤其值得一提的是Mentor嵌入式Linux和Codesourcery软件工具,AMD全球副总裁兼数据中心与嵌入式解决方案事业部总经理 Scott Aylor介绍说,Mentor嵌入式Linux是Mentor Graphics提供的预封装的Linux版本,CodeSourcery软件工具可以为开发者提供增强的性能和特性,这两个工具可以为开发者提供良好的编程环境和高效率的开发支持。在这个基础之上,AMD将持续做后续的维护和新版本的更新等,另外,AMD还为开发者提供了其它的性能分析工具,用来基于应用做更多的优化。

        更为重要的是,AMD 霄龙 3000系列嵌入式处理器家族能够给带来企业级的可靠性、可使用性和可服务性(RAS)特性,AMD锐龙V1000系列嵌入式处理器家族能够带来比上代产品高达整整2倍的性能提升。而这对于使用嵌入式系统的用户来说无疑是非常重要的。

        对于用户来讲,除了性能外,嵌入式系统的安全性是他们最为关心的问题,但无论是AMD 霄龙嵌入式处理器,还是AMD锐龙嵌入式处理器,都会通过硬件级片上的安全处理器帮助用户保护数据安全,并由基于硬件验证启动的功能来保证系统启动已信任的软件。另外,安全存储加密(SME)功能将会检测未授权物理内存的访问,同时安全加密虚拟化(SEV)提供进一步的检测,加密虚拟机内存,而这些都无需开发者针对应用作出任何相关调整,就可以充分满足用户对诸如顶式交换机、瘦客户端设备或者其他介乎二者之间的系统的各种各样的需求。

        而在实际的应用中,锐龙V1000系列产品具有比较好的竞争优势,特别适合诸如客户端、游戏、医疗成像、工厂自动化和物联网方面的一些应用,而霄龙3000系列的产品能够为边缘计算、联网网络、存储等提供了性价比较高的嵌入式解决方案。

        你看,这样,既填上了嵌入式软硬件开发中的各种坑,又给使用嵌入式系统的用户提供了广泛的应用场景以及性能和安全性上的保证,开发者们,你们何乐而不为泥?

    展开全文
  • 本系列课程针对有意向学习嵌入式软件开发的童鞋,从零开始、深入浅出,内容涵盖:linux系统基础、shell、linux C编程、linux系统编程、网络编程、ARM体系结构及汇编语言、ARM裸机编程、linux系统移植、linux驱动开发...
  • 在百度搜索“嵌入式”、“嵌入式开发”、“嵌入式发展前景”等字眼,出来的都是一大堆培训机构,以及大篇幅的他们所谓的对嵌入式行业的“见解”,不否定其内容有一定的专业性,但“卖瓜赞瓜”的道理谁都懂。...

    640?wx_fmt=gif

    在百度搜索“嵌入式”、“嵌入式开发”、“嵌入式发展前景”等字眼,出来的都是一大堆培训机构,以及大篇幅的他们所谓的对嵌入式行业的“见解”,不否定其内容有一定的专业性,但“卖瓜赞瓜”的道理谁都懂。

    因此,作为一名一线企业嵌入式软件工程师的笔者,想通过自己的实际经历理性地评论当今嵌入式行业的真实状况。

    640?wx_fmt=jpeg

    1.嵌入式的定义和举例分析

    官方定义:

    根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监控或者辅助设备、机器和车间运行的装置”。

    这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

    目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

    说白了就是先设计硬件,然后根据需求编写能在该硬件上运行的软件,就成了所谓的“智能硬件”。

    或者说得还不够明白,那行,我们说一说具体的嵌入式产品有哪些,嵌入式是做什么的:

    传统嵌入式产品:空调主控模块、冰箱主控模块、家用遥控器、智能手机、教学投影仪、音响系统、雷达系统、路由器等等;

    前沿嵌入式产品:无人机、智能音响、机器人控制、城市天眼系统、智能家具、自动驾驶汽车、扫地机器人、小米手环等等;

    一起看一些前沿的嵌入式产品:

    下面是大疆无人机,可应用在高空拍摄、军事侦查、高空作业、自动巡逻、农业工作、矿业勘测、地形测绘等方面。

    640?wx_fmt=png

    下面是天猫精灵智能音响,可进行语音识别、对话交互,应用与娱乐、生活、购物、智能家具控制等方面,属于新一代音箱。

    640?wx_fmt=png

    下面是百度机器人,通过深度学习、神经网络等算法,实现“百度大脑”,具有自学习、自训练能力,如最强大脑的小度机器人。

    640?wx_fmt=png

    下面是自动驾驶汽车,自动驾驶是一个前沿的科技,在我国还没本真正实施,不仅是技术方面,它还得得到政府支持和认同。

    640?wx_fmt=png

    下面是海尔扫地机器人,能够自动巡逻,自动绘制室内地图,自动避障,自动清洁地面,还你一个干净的环境。

    640?wx_fmt=png

    下面是小米手环3,可显示微信、来电等消息内容,振动闹钟,心率计算,步数统计,实时运动数据查询,睡眠质量监测等。

    640?wx_fmt=png

    看完这些前沿科技产品后可发现,这些形形色色的“高端产品”都离不开嵌入式技术,离不开传感器技术,离不开软件程序。

    那么我现在可以告诉你,嵌入式开发的工作就是去开发以上等一系列产品 ,这就是嵌入式,相信此刻你对嵌入式行业已有“形而上学”的了解。

    2.嵌入式工程师在企业工作的真实内容

    嵌入式软件开发具体可以分三类:

    嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。

    该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指Linux上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。业界对驱动人才的定义是三年才算入门,可见此门槛之高。

    嵌入式系统工程师:主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。

    嵌入式应用工程师:编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念。

    这需要很强的学习能力,该职位也是各大公司需量最大的,一般10人的开发小组,驱动开发与系统开发与应用开发的比例是1:2:7。

    根据我的经验,世界上可以分成两种嵌入式工程师,一种是大公司的嵌入式工程师,另一种是小公司的嵌入式工程师,我知道这样分类很不妥,但并非毫无道理,请听我一一下概述:

    大公司:大公司的特色是什么?答案:人多!

    人多导致的后果是什么?答案:项目分工非常细,都遵循“术业有专攻”这一哲学道理。

    例如职位是嵌入式驱动开发,那么大公司可能还会细分嵌入式显示屏驱动工程师、嵌入式音频驱动工程师、嵌入式电源驱动工程师等。

    这就是大公司一贯的作风,它希望去培养某一方面的人才;说白了就是如果你分配到的是一个显示屏驱动项目,那么有可能你这一年内都是在开发显示屏驱动,一年后你将是显示屏驱动方面的一个小专家。

    在大公司记住一点,你做的东西都是很“精”的;同时,大公司的薪资水平和福利也是相当可观的,有完善的晋升路线,离职率一般不高。

    小公司:小公司的特色是什么?答案:人少!

    人少导致的后果是什么?答案:项目分工不明确,什么都得干,它给你灌溉的思想是“小陈,我们培养的是综合性人才,在这里你就是全栈工程师”。

    估计很多人都没听明白,意思是说这里人少活多,你什么都得干。小公司才不会管你是嵌入式驱动工程师还是嵌入式应用工程师(有的公司还是区分的,的确不能以偏盖全)。

    反正是活你就得干,分分钟前端后台服务器你都得给我干,不要跟我说什么没学过,没学过就去学呗。

    小公司还有一个特色就是:“节奏快”,大公司里面可能开展一个项目会花上几个月的时间或者更长,在小公司是不存在的,领导都是指望着你几天或者两三周完成,那你也只能说呵呵了。

    的确,在小公司你可以得到飞速的进步,很强的综合性技能,前提是比人家花出更多的时间,把每一个项目理解清楚,而不是应付心态。坚持下来,两年后必能独当一面。

    小公司提供给应届生的薪资水平相对与到大公司来说要低,其福利不完善和晋升路线也一般比较模糊,所以小公司的离职率会比较高,经常出现两年三跳的情况。

    还有一个经验分享给年轻人:无论哪种语言,程序代码只是一个简单的工具,最后真正留下的只有原理、协议、框架、思维。

    3.嵌入式发展前景与当今状况

    目前的嵌入式开发更倾向于智能化,也就是我们所说的智能硬件(硬件+软件),从现在各种前沿的嵌入式产品来看的确如此,嵌入式产品的一个发展趋势是更倾向与自动化控制和人机交互,而不是强调“算法”这一块。

    要区分你仅仅是一名嵌入式工程师而不是算法工程师,什么一大堆“人工智能”、“阿尔法狗”、“深度学习”、“神经网络”都不需要深入理解,那是研究生、博士生做的。

    笔者并不是说你的能力不足,而是“术业有专攻”,这并不是一名嵌入式工程师的工作量,你需要做的仅仅是与他们的“云端大脑”进行对接,调用他们API就完事了。

    由于人工智能、深度学习、神经网络、区块链、大数据等先进学科的崛起,很多人都产生质疑:“嵌入式还有发展前景吗”?

    这个问题我在这里可以很肯定地告诉你:“嵌入式有很好的发展前景,前沿嵌入式技术即将崛起,或者说已经崛起”。

    的确,人工智能、大数据这些学科会给嵌入式带来冲击,就目前来看,大学生更倾向与python编程语言、机器学习这一块,而嵌入式学者的确比往年有所下降。

    但学者少了并不代表他的需求就少了,并不代表他的薪资水平下降了,目前的一个嵌入式技术更倾向于与智能学科相结合的趋势。

    以百度机器人为例,机器人的核心是大脑,即是“数据和算法”,但机器人大脑想机器人身躯能够像人类一样活动,能说会道,行走自如,那么就必须得依靠嵌入式技术。

    这就是我所说的嵌入式+智能学科应用,从长久来看,嵌入式只会越来越火,智能学科的崛起必定带动新型的嵌入式技术发展。

    对于发展前景,有一项更重要的参数,那就是当今嵌入式软件工程师的薪资水平。

    我下面给出一些理性的数据,是从各大招聘平台调研而来(数据只能作为参考,具体薪资还是得看个人修为,有的达不到该薪资水平,有的早已超过该薪资水平)

    非211、985院校应届毕业生平均月薪:8K;

    是211、985院校应届毕业生平均月薪:12K

    一年工作经验者月薪:10K-15K

    二年工作经验者月薪:12K-18K

    三至五年工作经验者月薪:20K-30K

    上述数据只针对那些“真正努力”的嵌入式工程师,不适合应“应付式工作”的嵌入式工程师,同时声明不对该薪酬水平负任何责任。

    4.展望人工智能带动前沿嵌入式技术

    人工智能给嵌入式带来的冲击,是福也是祸,人工智能实现智能化无处不依赖嵌入式技术,人工智能学科在不知不觉中带动嵌入式技术革新。

    从一系列智能产品,包括无人机、智能音响、机器人控制、城市天眼系统、智能家具、自动驾驶汽车、扫地机器人、小米手环等等。

    有哪个不依靠嵌入式技术来实现?并没有,人工智能越是想向人类表达他的智能水平,越是要依靠嵌入式技术。

    所以前沿嵌入式技术更倾向于嵌入式+智能学科的发展,当智能学科真正崛起,嵌入式必定又是一次浪潮与技术革新。

    作者:陈明,现居深圳。CSDN博客专家,目前从事嵌入式软件开发工程师工作。主要负责:语音识别、声学基础研究、嵌入式软件开发工作等。

    声明:本文系作者投稿,不代表CSDN立场。

     

    展开全文
  • 嵌入式基础

    千次阅读 多人点赞 2018-07-15 10:41:18
    关于嵌入式基础,应该熟悉的知识点:嵌入式系统的定义:一种完全嵌入受控器件内部,为特定应用而设计的专用计算机系统。其核心由一个或几个预先编程以用来执行少数几项任务的微处理器或者微控制器组成。所有带有数字...
  • 嵌入式系统的分类

    千次阅读 2020-05-12 16:41:05
    按照嵌入式系统所使用的操作系统,可以将嵌入式系统分成三类:Rich OS类、RTOS类、Bare-metal类。
  • C和嵌入式

    千次阅读 2019-06-25 14:59:03
    1 嵌入式领域的C语言 假定掌握了C语言基础,了解学习C在嵌入式领域的应用有哪些特殊之处。工作中遇到的基础知识问题请自行解决,推荐阅读《C程序设计》、《C和指针》、《C陷阱与缺陷》,最好还能理解编译、汇编、...
  • 嵌入式和单片机的区别在哪?

    千次阅读 2019-05-31 02:39:35
    单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈这两个概念的理解。什么是单片机首先明确概念,...
  • 什么是嵌入式硬件工程师  随着嵌入式技术的普及,硬件工程师的性质也有所改变。嵌入式硬件工程师与我们平常所说的硬件工程师不同。嵌入式硬件工程不但要求具备硬件工程师的基本技能,还必须完成部分软件工程师的...
  • 嵌入式系统架构浅谈:硬件的选型(一) -------主控芯片 这篇文章主要对嵌入式系统,单片机这块谈一下嵌入式系统的架构。因网上的资料较少,本人在学习的过程中不时会有无具体方向的困惑,偶然得到高人指点,现记录...
  • 嵌入式开发知识体系与开发入门

    万人学习 2019-06-24 13:25:56
    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 ...
  • 嵌入式软件工程师岗位要求

    万次阅读 多人点赞 2018-04-28 01:02:21
    1.嵌入式上层的软件应用开发需要:精通嵌入式Linux C语言编程、嵌入式Linux C语言数据结构、嵌入式Linux项目开发流程、嵌入式 Linux并发程序设计、嵌入式 Linux应用编程、嵌入式 Linux网络编程、嵌入式数据库开发;...
  • 阶段一嵌入式项目实践

    万人学习 2018-10-22 21:38:04
    1.了解嵌入式项目开发方法流程 2.掌握基本的嵌入式项目开发能力 3.串口服务项目实践 4.嵌入式WEB服务器移植 5.数据采集控制系统实践
  • 韦东山嵌入式Linux第一期视频

    万人学习 2020-07-21 20:02:20
    掌握写汇编代码的能力,可以分析任意裸板包括U-boot、内核里的相关汇编代码; 掌握常用的硬件部件的操作,比如GPIO,UART,I2C,LCD,触摸屏; 深入理解ARM体系统架构,可以写出具备中断功能的裸板程序,对程序...
  • 想要了解嵌入式软件开发工程师待遇怎么样,那就先来看一下嵌入式软件工程师发展趋势怎么样,据市场分析,现在的嵌入式系统在技术领域呈现空前绝后的发展趋势,而且发展也相对而言比较快,在这个时代,随着物联网的...
  • 嵌入式软件开发

    万人学习 2017-02-10 09:10:14
    课程主要讲解一些在开发中需要知道的常识,以及一些常见的开发平台,开发中应当注意的事项以及一些实战技巧,这些全部均来源于我的CSDN博客发表的内容。
  • 4.9.链表&状态机与多线程

    万人学习 2018-10-22 21:38:03
    本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。
1 2 3 4 5 ... 20
收藏数 390,957
精华内容 156,382
关键字:

嵌入式