很多人对嵌入式应该学些什么说的很复杂或者很简单,我以主流的linux操作系统为例来展开。

很多人只能做单片机开发,比如C51或者STM32(比较常见)等,当然了他们也可以跑一些小型的操作系统比如μC/OS-II或μC/OS-III等,当然了这些也是基于C语言的学习,也是和硬件在打交道,属于C语言直接调用库函数或者直接操作寄存器,也能够让硬件正常的工作,没错,会这些你也能有一份工作,学的深入的也会有不错的工作,正所谓360行行行出状元嘛,但是当你在这个方向工作三五年之后你会发现你进入到了瓶颈期,为什么呢?因为你会发现你的技术处于某个高度,很难得到提升,而且有很多东西感觉属于这个行业,想尝试着去做,但是就是没有能力去做,这个时候不是你能力不够,而是你的技术储备不够了。你需要去打通一下任督二脉,那么这个时候建议你上手真正的嵌入式开发。

嵌入式门槛的学习比较高的原因,因为中间需要很多的技术储备,如果不能打通中间环节,那么你就只能停留在单片机开发的层面。那么接下来我大致的帮大家理一下这一块的一个思路,小弟入坑不久,错误和漏洞肯定是有的,希望大家能稍稍包涵一下,在此谢过。

学习嵌入式开发首先你需要有一个良好的C语言功底,你需要对C语言可以说是熟练掌握,当然了各种运算符和表达式以及类型的范围是基础中的基础,判断选择循环的语句肯定不能用错,static、extern,const,等的用法和对变量函数的作用域等的影响都是基础,typedef,struct,union,#define的各种用法和坑肯定要掌握,说实话掌握上面这些再加上指针和数组的用法基本上做单片机开发就没有问题了,但是如果是嵌入式开发,对C语言你还需要对各种数组,指针,数组指针,指针数组,函数指针,回调函数的用法熟练掌握,为什么呢?因为驱动的部分基本上都是函数指针和回调函数来实现对各种接口的支持。这个是对C部分的一个要求,相对来说要求较高,不过贵在应用嘛,快速掌握这些和通过几年时间掌握这些其实就是时间的问题,相信多数人事耗不起这个时间的。

第二个你需要掌握的内容是数据结构,数据结构是对数据的组织结构(鄙人陋见),那么这个时候链表的强大就会出现在你的面前,很多人感觉数据结构的学习很难,的确很难,我给大家简单的说下小弟以为的难点在哪里,难点在于他需要你去梳理数据与数据之间的关系,以前咱们是直接遍历,现在要实现对数据的增删改查加排序等功能,同时还要把这些数据当做一个节点栓在一根(单链表等)或两根绳子(双链表等)上,那么怎么先给你的数据申请个位置(malloc一个节点,按照你定义的节点形式)然后在链表上遍历找到合适的位置插入就可以的,同时后面的绳子还不能断对吧,保证数据的完整性。一本不错的书是《大话数据结构》(我没看完,不过很不错)。那么对嵌入式来说,数据结构学到那种程度就可以了呢?我相信这个是大家关注的问题,因为数据结构那么多东西,都学完还不累死了啊。我这里简单的发表一下建议,数据结构将前面的单链表,双链表,循环链表,栈,队列全部拿下(能自己画画节点的图,最好能独立实现代码)就够了,树的话了解树的递归创建和遍历就可以的了,再内核中出现最多的就是链表,希望大家好好掌握,为后面打下坚实的基础。而对于图的话,那是算法工程师的事了,因为图的多数应用都位于算法中,这里就不做过多的介绍了。不过还是要给大家强调一下,如果想深入学习嵌入式开发,那么C语言的掌握还有数据结构部分的思想是重重之中。

拿下C和数据结构之后其实你发现你还是停留在裸机的开发,要想进入嵌入式的开发,那么你需要切入到Ubuntu的学习,当然了个人建议前面的C语言和数据结构也在Ubuntu下开发会更好,因为嵌入式开发目前Ubuntu环境是最好上手的。(这里做个广告,华清远见创客学院的整套嵌入式课程都是在Ubuntu的环境下学习的。)要想进入Ubuntu的学习那么你需要一把钥匙,熟悉shell命令,能实现像windows下那样复制粘贴拷贝重命名查找….,当然了都是通过命令实现的,此外你还需要熟悉vi编辑器,这款最强大的ide,可以百度一下vi的配置,把在vi环境下的代码编辑作为你初入嵌入式必须攻克的一个门槛(很重要),当你基本的shell命令和vi使用拿下了之后,你就拿到了这把钥匙(估计突击这一块也就两三天就能拿下)。

后面你可以看到要想与内核打交道你需要拿下文件IO和库函数,为什么呢 ,你会发现之前的C和数据结构基本上都没有对文件进行过操作,而linux当中号称是”一切皆文件”,因为在驱动开发中不管你是什么设备对我来说都是一样的,都只是一个文件而已,linux下有七种文件类型,bcd-lsp,大家可以自己去扩展一下,那么在linux下将你所有的设备都抽象成各种文件,字符设备文件,块设备文件,网络设备文件,普通文件等等,这也就是说要想学习linux,学习驱动,你必须掌握linux下对各种文件的操作,比如对文件的打开,读,写,ioctl,关闭以及问目录的打开关闭等。linux下提供了两套标准,一个是文件IO,一个是标准IO,区别简单说就是是否有流缓冲区(具体可以自己去扩展),这里区别一下linux下支持的是文件IO,其实这个难度也不大,基础较好的人不用一周就能掌握,当然应用的熟练度肯定是有待斟酌的了。

那么拿下了文件IO和标准IO就万事大吉了吗?不是的,这里我们稍稍谈一下linux内核是怎么工作的,它是通过对进程和线程的调度来完成各种任务的,那么这个时候你想一想,你该做什么啊?是的,没猜错,你需要把linux下7中进程间通信方式给拿下,比如无名管道,有名管道,信号,信号量,共享内存和消息队列以及网络通信,不过由于进程的资源消耗可能稍大,所以引入了线程,那么你需要掌握线程的同步和互斥的机制,同时再深入理解一下调度的概念以及与进程线程间的关系,做个小项目练练手,那么恭喜你,学到这里已经可以找到一份应用层的工作了,比如网络开发等等。

不过俗话说学无止境嘛,一条路走到黑,索性把驱动也拿下吧,只有拿下驱动,你才能够从最底层的硬件一直到最上层的应用然后再从最上层的应用到最底层的驱动打通整个闭环,你会发现很多东西对你来说都是小case的了,驱动开发首选的硬件肯定是ARM的了,如果你有51和STM32等硬件基础,恭喜你这一块很快就能突破,如果你是软件出身不懂硬件,没关系,有好的指导(比如说华清远见创客学院:又打广告了,哈哈~~)你也可以快速上手,其实我们以前也想把路走好,但是就是不知道走那条路,所以走了很多弯路,说白了就是少个人引导你前进。不过嘛,做技术的都喜欢按照自己的想法,自己认为正确的方向前进,我也是,哈哈。说了很多废话,简单的说一下如何上手学习驱动,首先你需要将环境搭建起来,你需要知道如何编译内核,如何将内核在板子上跑起来,这个是第一步。当然了学驱动写的第一个驱动肯定也是点灯(点灯大法好),然后慢慢的接触一下linux下如果去写一个简单的字符设备驱动,学到后面你会发现驱动基本上就是在套框架,比如字符设备框架,Platform框架,IIC框架,SPI框架,INPUT输入子系统框架,misc,USB等等框架,那么驱动到底是做什么的呢?驱动向下操作硬件,向上提供接口,简单点说就是你以前配置硬件寄存器让硬件正常工作,那么你先在驱动中也去相同方式配置硬件,只不过是要将配置硬件的过程何时的套入驱动的框架当中,同时向外面提供你对硬件的操作接口,比如open,read,write,ioctl的接口等,说白了就是在应用层通过io操作去调用驱动的接口然后再驱动提供的接口中去修改硬件的状态,实现对硬件的控制。当然了一些基础知识如自旋锁,互斥体,中断底半部等等大家可以自行去了解。

上面那张图其实就解释完了,但是我们再想一下嵌入式系统是什么,以应用为中心,对吧,那么我们需要在实战中去应用我们的知识和技术去解决实际的问题,这个时候有两套框架,一个是CS,一个是BS,那么在这些基础上你想往哪个方向发展都是可以的。因为任督二脉已通,修炼何种神功就看你的选择了。

当然了上面这些吃几年是没什么问题的,不过热爱技术的大哥们一般都会再学两个东东,一个叫做高级语言,可以选择C++,JAVA,PYTHON三选一,一个叫做界面,可以选择QT、android或者web等,这些都是增值哇,以上为小弟愚见。

4、学习嵌入式以后可以做些什么?(职业发展方向)

4.1、成为某个方向技术方面的核心,领域内的一专多才的专家;

4.2、另一个是从项目中锻炼起来,成为项目主管或是管理型人才;

4.3、再有就是因为嵌入式开发的门槛相对较高,技术的附加值较高,可以利用自己的技术及行业经验去创业。

4.4、可以做很多自己想做的事;

学嵌入式职业发展方向有哪些?相关推荐

  1. 嵌入式领域的职业发展方向是什么?

    作者:知乎用户 链接:https://www.zhihu.com/question/19593847/answer/12330161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  2. java 职业发展方向_学Java有哪些发展方向 可以从事哪些职业

    很多人都不知道学Java有哪些发展方向,可以从事哪些职业,随着互联网技术的发展,导致现在Java培训非常热,是因为通过学习Java能够快速的就业,这对于往年就业压力非常大的大学生来说,无疑是一条就业的 ...

  3. 怎样确定职业发展方向

    IT行业走好职业发展之路 [编者按]陈安之说过,有什么样的目标,就有什么样的人生.特别是在IT这样一个充满活力又极端残酷的特殊行业中,每天都在创造着新的传奇,创造与颠覆.裂变与整合.竞争与合作,IT人 ...

  4. 一篇文章看清楚 Linux 的职业发展方向

    手机.汽车.甚至宇宙飞船,在今天的科技世界中,你几乎到处都能看到 Linux 的身影.前两天 SpaceX 成功将宇航员送入太空的猎鹰9号火箭与龙飞船用的也是 Linux的操作系统.身处与 Linux ...

  5. 软件测试行业有哪些细分方向,软件测试人员有哪些职业发展方向?

    原标题:软件测试人员有哪些职业发展方向? 随着软件测试行业入门门槛低,薪资报酬高,不断地有转行的人群和刚毕业的大学生涌入到软件测试行业,看着一批批新鲜血液的加入,很多软件测试工程师都开始思考起自己的未 ...

  6. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?

    在Java程序界流行着一种默认的说法叫"黄金5年",意思是说,一个Java程序员从入职的时候算起,前五年我选择直接影响着整个职业生涯的发展方向和薪资走向. 而这5年,也决定了一个程 ...

  7. 软件测试职业发展三步曲之一 - 软件测试职业发展方向

    天地玄黄,宇宙洪荒:所谓光阴似箭,因为一转眼滚滚的历史车轮就将人类文明推进了二十一世纪的信息时代!葛大爷有对白曰:"二十一世纪最宝贵的是什么?"对曰:"人才!" ...

  8. 转“软件测试职业发展方向”

    转"软件测试职业发展方向"  天 地玄黄,宇宙洪荒:所谓光阴似箭,因为一转眼滚滚的历史车轮就将人类文明推进了二十一世纪的信息时代!葛大爷有对白曰:"二十一世纪最宝贵的是什 ...

  9. 数据仓库介绍:什么是数据仓库、数据仓库功能、数据仓库价值、数仓领域职业发展方向规划

    数据仓库介绍:什么是数据仓库.数据仓库功能.数据仓库价值.数仓领域职业发展方向规划 大家好,本次分享的主题是数据仓库,通过本次分享的目的,一个是帮助到初次接触大数据行业.或者想要了解大数据体系的伙伴, ...

  10. 程序人生:必须了解的程序员 8个职业发展方向

    前言: 在职业发展道路上,需要不断提升自己,需要学习资源的,加微信免费领取[备注007],小编准备了学习视频,学习线路,自学书籍,职业发展视频. 众所周知,21世纪已然是互联网时代,互联网技术在各行各 ...

最新文章

  1. spark算子_Spark常用算子
  2. mssql 事务的一个例子
  3. 【java笔记】可变参数
  4. mysql 分库备份
  5. python讲得比较好的视频_有没有推荐好的python教学视频?
  6. 2021 年“认证杯”数学中国数学建模网络挑战赛 B题
  7. 软件系统概要设计的三大要素
  8. 怎样任意裁剪图片?如何快速改变图片形状?
  9. 我分析了2837首歌曲,做了个信息检索与信息抽取系统
  10. 【AAAI 2021】全部接受论文列表(一)
  11. H5网页微信授权登录
  12. Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
  13. MySQL5.5 的安装与配置
  14. java同时引用不同版本同一个jar包
  15. 【OpenGL基础】|| OpenGL渲染过程介绍
  16. 提升方法boosting
  17. 5000元投影仪性能排行榜,当贝F5遥遥领先其他投影仪
  18. THUSC 2017 游记
  19. 分类算法及其应用场景
  20. 5G时代的物联网:福器还是凶器

热门文章

  1. Ax=b解,向量空间的基、维度(Part IV)
  2. ​​什么是图形工作站?我们日常接触的计算机类别
  3. 互联网思维之社会化思维
  4. 湖南计算机office三月份,2020年3月计算机二级MS Office考试怎么准备
  5. N-gram详解分析
  6. 基于股票数据的多元线性回归分析
  7. 回文子串、回文子序列相关题目
  8. 圣诞节计算机老师贺卡祝福语,[圣诞节贺卡教师祝福语]2020圣诞节贺卡祝福语
  9. OpenCV识别图形以及常用函数处理
  10. 教你炒股票9:甄别“早xie”男的数学原则!