学嵌入式职业发展方向有哪些?_研究生方向什么未来是嵌入式工程师-程序员宅基地

技术标签: 职业发展方向  嵌入式发展  嵌入式方向  嵌入式  

很多人对嵌入式应该学些什么说的很复杂或者很简单,我以主流的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、可以做很多自己想做的事;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xueheih/article/details/80309900

智能推荐

FTP命令字和返回码_ftp 登录返回230-程序员宅基地

文章浏览阅读3.5k次,点赞2次,收藏13次。为了从FTP服务器下载文件,需要要实现一个简单的FTP客户端。FTP(文件传输协议) 是 TCP/IP 协议组中的应用层协议。FTP协议使用字符串格式命令字,每条命令都是一行字符串,以“\r\n”结尾。客户端发送格式是:命令+空格+参数+"\r\n"的格式服务器返回格式是以:状态码+空格+提示字符串+"\r\n"的格式,代码只要解析状态码就可以了。读写文件需要登陆服务器,特殊用..._ftp 登录返回230

centos7安装rabbitmq3.6.5_centos7 安装rabbitmq3.6.5-程序员宅基地

文章浏览阅读648次。前提:systemctl stop firewalld 关闭防火墙关闭selinux查看getenforce临时关闭setenforce 0永久关闭sed-i'/SELINUX/s/enforcing/disabled/'/etc/selinux/configselinux的三种模式enforcing:强制模式,SELinux 运作中,且已经正确的开始限制..._centos7 安装rabbitmq3.6.5

idea导入android工程,idea怎样导入Android studio 项目?-程序员宅基地

文章浏览阅读5.8k次。满意答案s55f2avsx2017.09.05采纳率:46%等级:12已帮助:5646人新版Android Studio/IntelliJ IDEA可以直接导入eclipse项目,不再推荐使用eclipse导出gradle的方式2启动Android Studio/IntelliJ IDEA,选择 import project3选择eclipse 项目4选择 create project f..._android studio 项目导入idea 看不懂安卓项目

浅谈AI大模型技术:概念、发展和应用_ai大模型应用开发-程序员宅基地

文章浏览阅读860次,点赞2次,收藏6次。AI大模型技术已经在自然语言处理、计算机视觉、多模态交互等领域取得了显著的进展和成果,同时也引发了一系列新的挑战和问题,如数据质量、计算效率、知识可解释性、安全可靠性等。城市运维涉及到多个方面,如交通管理、环境监测、公共安全、社会治理等,它们需要处理和分析大量的多模态数据,如图像、视频、语音、文本等,并根据不同的场景和需求,提供合适的决策和响应。知识搜索有多种形式,如语义搜索、对话搜索、图像搜索、视频搜索等,它们可以根据用户的输入和意图,从海量的数据源中检索出最相关的信息,并以友好的方式呈现给用户。_ai大模型应用开发

非常详细的阻抗测试基础知识_阻抗实部和虚部-程序员宅基地

文章浏览阅读8.2k次,点赞12次,收藏121次。为什么要测量阻抗呢?阻抗能代表什么?阻抗测量的注意事项... ...很多人可能会带着一系列的问题来阅读本文。不管是数字电路工程师还是射频工程师,都在关注各类器件的阻抗,本文非常值得一读。全文13000多字,认真读完大概需要2小时。一、阻抗测试基本概念阻抗定义:阻抗是元器件或电路对周期的交流信号的总的反作用。AC 交流测试信号 (幅度和频率)。包括实部和虚部。​图1 阻抗的定义阻抗是评测电路、元件以及制作元件材料的重要参数。那么什么是阻抗呢?让我们先来看一下阻抗的定义。首先阻抗是一个矢量。通常,阻抗是_阻抗实部和虚部

小学生python游戏编程arcade----基本知识1_arcade语言 like-程序员宅基地

文章浏览阅读955次。前面章节分享试用了pyzero,pygame但随着想增加更丰富的游戏内容,好多还要进行自己编写类,从今天开始解绍一个新的python游戏库arcade模块。通过此次的《连连看》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。_arcade语言 like

随便推点

【增强版短视频去水印源码】去水印微信小程序+去水印软件源码_去水印机要增强版-程序员宅基地

文章浏览阅读1.1k次。源码简介与安装说明:2021增强版短视频去水印源码 去水印微信小程序源码网站 去水印软件源码安装环境(需要材料):备案域名–服务器安装宝塔-安装 Nginx 或者 Apachephp5.6 以上-安装 sg11 插件小程序已自带解析接口,支持全网主流短视频平台,搭建好了就能用注:接口是公益的,那么多人用解析慢是肯定的,前段和后端源码已经打包,上传服务器之后在配置文件修改数据库密码。然后输入自己的域名,进入后台,创建小程序,输入自己的小程序配置即可安装说明:上传源码,修改data/_去水印机要增强版

verilog进阶语法-触发器原语_fdre #(.init(1'b0) // initial value of register (1-程序员宅基地

文章浏览阅读557次。1. 触发器是FPGA存储数据的基本单元2. 触发器作为时序逻辑的基本元件,官方提供了丰富的配置方式,以适应各种可能的应用场景。_fdre #(.init(1'b0) // initial value of register (1'b0 or 1'b1) ) fdce_osc (

嵌入式面试/笔试C相关总结_嵌入式面试笔试c语言知识点-程序员宅基地

文章浏览阅读560次。本该是不同编译器结果不同,但是尝试了g++ msvc都是先计算c,再计算b,最后得到a+b+c是经过赋值以后的b和c参与计算而不是6。由上表可知,将q复制到p数组可以表示为:*p++=*q++,*优先级高,先取到对应q数组的值,然后两个++都是在后面,该行运算完后执行++。在电脑端编译完后会分为text data bss三种,其中text为可执行程序,data为初始化过的ro+rw变量,bss为未初始化或初始化为0变量。_嵌入式面试笔试c语言知识点

57 Things I've Learned Founding 3 Tech Companies_mature-程序员宅基地

文章浏览阅读2.3k次。57 Things I've Learned Founding 3 Tech CompaniesJason Goldberg, Betashop | Oct. 29, 2010, 1:29 PMI’ve been founding andhelping run techn_mature

一个脚本搞定文件合并去重,大数据处理,可以合并几个G以上的文件_python 超大文本合并-程序员宅基地

文章浏览阅读1.9k次。问题:先讲下需求,有若干个文本文件(txt或者csv文件等),每行代表一条数据,现在希望能合并成 1 个文本文件,且需要去除重复行。分析:一向奉行简单原则,如无必要,绝不复杂。如果数据量不大,那么如下两条命令就可以搞定合并:cat a.txt >> new.txtcat b.txt >> new.txt……去重:cat new...._python 超大文本合并

支付宝小程序iOS端过渡页DFLoadingPageRootController分析_类似支付宝页面过度加载页-程序员宅基地

文章浏览阅读489次。这个过渡页是第一次打开小程序展示的,点击某个小程序前把手机的开发者->network link conditioner->enable & very bad network 就会在停在此页。比如《支付宝运动》这个小程序先看这个类的.h可以看到它继承于DTViewController点击左上角返回的方法- (void)back;#import "DTViewController.h"#import "APBaseLoadingV..._类似支付宝页面过度加载页

推荐文章

热门文章

相关标签