概述

​    很多工程师要往嵌入式方向发展,特别是ARM得到应用后,这个趋势更是有增无减,但你真的知道怎样入门嵌入式么?你知道嵌入式未来的发展方向么?


怎样入门嵌入式嵌入式未来的发展方向
在很多学生或者初级工程师都关注嵌入式,尤其在ARM大红大紫以后,这个趋势更是有增无减,但你真的知道怎样入门嵌入式么? 你知道嵌入式未来的发展方向么?

我先谈一下自己的背景吧,我做了5年软件工程师,3年项目经理,全部是嵌入式领域,包括消费电子和车机产品。 感觉嵌入式软件底层的发展一直停留在07年的水平,即使是现在,使用的技术和那个时候也差不多。 所作的事情基本围绕硬件调整driver, 内核基本都是Linux, 不管你上面的系统是android还是QT orothers, 作为工程师的职业发展一直处于停滞状态。 为了突破这个我后面选择了做PM,目前还在这个职位。 对于转变是好是坏,说不清楚,有失去的(技术有些淡忘),也有收获;目前也很迷茫, 上升空间不大, 琐事也很多, 真是想换个行业。下面我们来继续谈一下吧!

首先, 嵌入式从业者可以怎么划分?

可以把嵌入式工程师分成bsp相关和业务相关。
bsp做的浅的, 根据板子需要裁剪下boot loader和kernel, 集成下驱动,简单调试硬件平台的各种问题。

做的深的,需要了解各大处理器构架(x86,mips,ppc,arm),懂汇编和c,有一定的硬件知识,懂各种常用的高速,中速,低速接口协议(ddr,pcie,usb,ethernet,nor,nand,i2c,spi),会使用示波器抓信号,量波形,会使用各类协议分析仪抓问
题,会结合驱动调试错误,linux,vxworks的系统机制和调试方法也要熟悉。

再进一步,需要懂处理器或者各类业务芯片的微构架,知道怎么去优化性能,负责解决各种疑难杂症。

另外一个方向,深入操作系统,非常熟悉其内核和各类协议栈,知道怎么去优化性能,负责解决各种疑难杂症。

基本上做到以上几点就可以不用担心小康问题了。就算收入不满意,各大内资外资公司都可以跳。不想搞技术的,转项目管理或者带队,或者到芯片公司做技术支持也可以,情商高的还可以转市场,销售。
不过在我接触过的地方,不管外企私企,基本上没有多少人能完全做到。而且很多东西不是自己钻研就能了解到,需要机会让你去玩。也许在芯片公司这样的机会多一些。

业务方向就广了,通信行业可以往网络构架,路由器,网络存储走,消费电子行业往图像识别,视频,图形走,工控领域不了解。你需要非常了解自己公司或者业界先进公司的产品和协议,并且了解你的客户的需求,并且把握行业动向。举个例子,我
在英特尔的时候,英特尔和索尼合作,设计了一款芯片。结果做出来以后,英特尔这个设计处理器的一流公司,在视频接口和nand接口上被索尼乱骂,很多协议上没定义的细节是工程师自己设计的,没有贴合索尼的实际应用,板子做出来很多问题。

做到业务领域的牛人,那前途更光明,无论留在系统厂商,或者去芯片公司,都被当宝。收入那就不用多讲了,没事还可以被邀请去创个业啥的。

所以说,懂嵌入式,最好还要懂业务。嵌入式是基础,业务是升华。都懂的话你就是大神了。

其次,如果我想掌握嵌入式,要涉及哪些方面呢?

嵌入式开发的门槛相对较高,对程序员的要求一般都是对底层感兴趣,学习能力、动手能力要强,对问题能够从全局和细节去把握,有很强的系统分析和设计能力。从工程师起步,一般有几个发展方向,一个是成为技术方面的核心,领域内的专家;另
一个是从项目中锻炼起来,成为项目主管或是管理型人才;再有就是利用自己的技术及行业经验去创业。

硬件和软件的发展方向是不同的。说说软件需要学习的知识。

虽然说搞嵌入式软件更多时候是在实际的工作中学习的,但一些重要的基础知识不可或缺。

1、计算机组成/微机原理
主要是为了了解微型计算机的硬件工作原理,明白CPU、总线、I/O、存储器等一些关键结构是怎么工作的,虽然是很枯燥的知识,但是对熟悉外围设备硬件工作方式,及操作系统,软件架构的设计及优化相当关键。

2、操作系统
嵌入式产品应用比较广泛的是Linux和WinCE。但操作系统的内部设计原理都是殊途同归。首先要去学习的是操作系统原理,去了解进程通信、内存管理、文件系统等几个重要的部分,因为这些在软件开发尤其是内核驱动开发时会用到。接下来可以去熟
悉至少一种主流的操作系统,Linux是一个很好的选择,去了解它的内核架构,设备驱动架构,如何去编译,裁剪,编写应用程序,以及如何使用在具体的嵌入式产品上。

3、数字电路
学习这方面的知识主要是了解一些基本的电路知识,如门电路、逻辑电路、存储器、寄存器,为了更好的理解嵌入式芯片,存储器,外围设备等硬件的设计,但往往在软件开发中未必能用的到。因为大部分硬件都提供了很完整的软件接口。

4、编程语言:C语言和汇编
对于C语言本身的基础来说,无非是把结构化,函数,数组,指针弄熟,但是嵌入式开发对C语言应用的要求会更高。要对内存分配,文件访问,寄存器访问,预处理指令,中断处理程序等等相当熟悉,这些都是在使用中要注意的细节问题。C语言对
程序的优化也很重要,而这些往往是需要从全局去考虑。汇编一般是和处理器的指令集相关的,可以更好的去理解处理器的工作原理,往往是用在一些需要效率的地方,如系统的初始化。

5、数据结构和算法
数据结构在嵌入式开发中也很重要,比如说操作系统里的很多实现都用到了具体的算法。基本的数据结构需要掌握,如各种链表,树,图等等;而算法的学习需要数学知识作为铺垫,用计算机语言去实现。对于软件从业人员来说,算法终究是一个工
具,在实际应用时再深入挖掘也可。

6、软件工程/软件测试/项目管理基础
这些是软件开发人员的必备知识。

7、开发平台
嵌入式的开发平台不局限于一种操作系统,因此要熟悉各种操作系统下的命令、编辑器及开发工具,这一点往往被很多人忽视。举个例子,Linux下的程序员开发环境往往是按自己的习惯搭建,熟练掌握一种编辑器如Vim/Emacs可以大幅度提高工作效
率。磨刀不误砍柴工。

嵌入式领域的方向是很多的,它所应用到的行业范围也很广。因此除了这些基础的知识以外,在具体的应用中可能还需要一些其它的知识,这些知识的每一种都可以研究的很深,举几个例子。

1、内核,驱动及中间件
内核开发和驱动本身就是一个方向,驱动和硬件接口相关,而内核的修改和移植更是需要对OS有很深的理解。至于中间件,
一般是基于OS或存在于OS和应用程序之间的库,最典型的就是基于Linux的Android。

2、通信协议
通信协议有很多种,经常用到的有网络通信协议,无线通信协议,串口/USB通信协议等等。

3、音视频技术
牵涉到音频视频处理,压缩,编解码等等。

4、信息安全
如加密技术,身份认证,数字证书等等。

5、行业知识
和具体行业或领域相关的知识,如通讯、工控、电子等等。

这里有一个我认为不错的学习步骤:
1、基础知识中,计算机组成、操作系统、编程语言和数据结构是必需的。
2、找一种CPU体系,了解其核心架构,学习指令集,比如说ARM。
3、找一种OS,如Linux,或是传统RTOS,如Nucleus、eCos,读源码和文档,理解OS内部实现,包括进程,任务,消息机制,
内存管理,设备驱动,中断等核心内容。
4、找一块成熟的开发板,板级资料要齐全,熟悉嵌入式软件开发流程。
5、在项目过程中深入学习其它的技术。
总之,这些知识的学习不是一蹴而就的,过程会很漫长,也没有什么特别的技巧。需要去看大量的技术文档和源码,而这些文档大部分又都是英文的。在工作和做具体项目的过程中会学习的比较快,理论结合实践才是王道。

嵌入式未来的就业方向如何?

嵌入式的发展方向有很多,门槛高低不一样。具体来说:
1、单片机:工控程序(不跑os)--入门容易,无外乎就是掌握汇编和c,能够根据datasheet来写,发展前景一般,也没有太大的技术难度,除非你在算法上面有优势,比如智能车会各种PID,模式识别上会神经网络,优化上会遗传算法等等,但是这些
复杂的控制一般就不会裸奔了(除非环境恶劣),肯定是处理器强悍,带os的;硬件制作--就是数字电路,涉及单片机的外设,感觉难度也不高,据我说知,只会单片机无论硬件还是软件工资都不高,也没有特别大的技术含量,同时,单片机更新换
代特别快,你需要从大量的单片机中找寻适合产品的,看不同的datasheet。

2、ARM:这个搞的人很多,软件上就是1.写底层驱动,这个入门,深入都不容易,需要对硬件及os有较深的了解,发展还是很不错;2.操作系统-比较复杂,linux,android等,你看现在很多手机厂商推出的操作系统也就是修改内核,换皮肤,就业还是
很容易的;3.应用程序,就是android开发或者Linux上应用开发(QT等),做的人很多,就业容易待遇也不错,需要掌握c++/java。硬件上1.就像手机一样在处理器上做整体的电路,比单片机入门难的多,做成技术大牛了不缺钱。2.soc,架构开发
等后面会提到

3、FPGA:就是硬件编程,入门很简单,做深很难,要对时序有非常深的理解和大量的项目开发经验,就算你做的特别好,前景还是不明确。FPGA近年的一大热门就是软件无线电,成本还降不下去,同时AD采样速度目前不够,导致FPGA的应用有
限,一般公司都是把它作为一个验证工具比如IC设计上的验证。只会FPGA就业会很窄,也不理想,建议作为工具学习。

4、DSP:就是算法,你需要一个名牌大学研究生以上学历,同时在算法和数学上有很强的能力。如果做不到,就不用搞了。

5、IC设计,做微处理器上的soc,前端后端,专用处理器(应该也属于嵌入式领域),入门难,成为牛人更难,对计算机体系结构,微处理器结构,集成电路等等有比较深的认识,然后项目经验大大的有才行。不过国内行情一般,外企招人少,希望今
年开始国家的扶持政策能够发挥作用。

6、微处理器体系结构:偏理论,偏宏观,研究生能够对整个体系结构有个比较浅的了解同时在局部上能够做一点设计工作,博士生能够对整个结构有较深的认识在局部上能设计。现在搞的多的是高性能体系结构,低功耗结构,并行开发等等,因为功
耗和并行限制了目前处理器的速度,所以在低功耗和并行上开发有很大的前景,同时基于神经网络的架构处理器,云计算处理器等专用处理器也是目前的一个热点。发展前景很好,但是难度不是一般的大,从中国在架构上做出的贡献在世界上分量很少
就可以看出。

怎样入门嵌入式嵌入式未来的发展方向相关推荐

  1. 项目管理在企业发展中的作用及未来的发展方向—— 来自项目管理群的讨论

    lwantstudy-PMO-DaLian 说: 3.9的主题,项目管理在企业发展中的作用 未来的发展方向,"思想者_pm_深圳"提出,老谷尝试分享 1. 项目管理在各性质的公司的 ...

  2. 学历、长相、家境普通的人,未来的发展方向是什么?00后的职业规划都已经整得明明白白

    前言 "少壮不努力,老大徒伤悲" 相信你跟我有着类似的经历,年少时不知学习的重要性,没有好好念书,不由己的选择了一所不是理想的大学,然后选择了一个自己并不是很了解的专业.这里也不是 ...

  3. 学历、长相、家境普通的人,未来的发展方向是什么?00后的职业规划都已经整得明明白白......

    前言 "少壮不努力,老大徒伤悲" 相信你跟我有着类似的经历,年少时不知学习的重要性,没有好好念书,不由己的选择了一所不是理想的大学,然后选择了一个自己并不是很了解的专业.这里也不是 ...

  4. 为什么大家都用美颜SDK进行拍摄?美颜SDK未来的发展方向是什么?

    在前面几篇文章中小编讲了很多关于美颜SDK技术方面的知识,很多同学可能看腻了,今天小编换个方向,为大家讲一下美颜SDK行业相关的话题. 一.为什么美颜SDK已经成为了当下年轻人的拍摄刚需? 了解这个问 ...

  5. 无服务器人工智能去中心化,人工智能未来的发展方向是去中心化智能?

    原标题:人工智能未来的发展方向是去中心化智能? 随着AI人工智能在应用场景的爆发以及技术成熟推动下,将进一步向去中心化侧进行迁移,从而催生去中心化智能. 人工智能未来的发展方向是怎样的? 应用场景落地 ...

  6. 【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析

    人工智能的概念 当人们提到"人工智能(AI)"时,很多人会想到机器人和未来世界的科幻场景,但AI的应用远远不止于此.现在,AI已经广泛应用于各种行业和生活领域,为我们带来了无限可能 ...

  7. 北卡罗来纳大学教授王永革:基于拜占庭协议的PoS是共识机制未来的发展方向...

    "基于拜占庭协议(BFT)的PoS克服了PoW的先天缺陷,是共识机制未来的发展方向" 本文旨在传递更多市场信息,不构成任何投资建议. 8月20日,由火星财经主办的"POW ...

  8. 如何投资新零售 新零售未来的发展方向有哪些?

    新零售模式是电子商务的一种商业模式,随着电子商务的不断发展,新零售模式也衍生出不同类型的商业模式.下面是易族智汇javashop为您编辑整理的如何投资新零售,新零售未来的发展方向有哪些,希望能帮到您. ...

  9. 制造业未来的发展方向有哪些?

    造业未来的发展方向是数字化管理.平台化设计.智能化制造.网络化协同.个性化定制.服务化延伸等多个方面. 在当前全球日趋复杂的经贸环境下,新冠疫情影响广泛深远,高端制造回流和中低端制造外迁对我国形成&q ...

最新文章

  1. mysql占用cpu_Mysql占用过高CPU时的优化手段(必看)
  2. 2.3.4 信号量机制
  3. Javascrip—拷贝对象(13)
  4. Python2 之 print函数示例
  5. 极客技术专题【009期】:web技术开发小技巧
  6. 结对-结对编项目作业名称-需求分析
  7. 程序员找工作时,大公司 VS 小公司,应该如何做出正确的选择?
  8. 用 State Pattern 来实现一个简单的 状态机
  9. openGauss 2.1.0 闪回特性
  10. 不安全的反序列化_CVE202027131 思科安全管理器反序列化漏洞 POC
  11. springboot上传限制1M的大坑
  12. L3-017 森森快递 (30 分)-PAT 团体程序设计天梯赛 GPLT
  13. 沟通与设计讨论总结:设计师不能不知道的10个沟通秘诀
  14. HTTP劫持 方面了解和学习
  15. 如何入门分子动力学模拟?
  16. Windows makecert生成代码签名证书
  17. mysql数据库交互界面_MySQL数据库界面化工具 - Navicat的常用功能
  18. Android 面试之20个常见 APP 架构常见面试题~
  19. 如何把新加的分区挂载到 根目录
  20. wireshark+网管交换机抓包教程

热门文章

  1. iOS开发入门——项目创建
  2. 牛客寒假算法基础集训营2 C处女座的砝码-梅氏砝码问题
  3. ofd格式文件怎么转换pdf格式,过来瞧一瞧
  4. linux网络测速qerf,yabo413.com
  5. 优云亮相GOPS2017全球运维大会 “黑科技”获全场最高关注
  6. 受控电源(SOC PWM调压SVB)计算工具CVC使用说明
  7. 1062 最简分数(JAVA)
  8. opencv 重映射、x轴翻转,y轴翻转,xy轴镜像,图像缩小
  9. 一位学长的成长经历——[转]我的东软五年
  10. 遇到的一些不错的Java极客程序