嵌入式学习的几种线路图

huang-y-x huang-y-x     2023-02-24     385

关键词:

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段:

 

1、嵌入式linux上层应用,包括QT的GUI开发
2、嵌入式linux系统开发
3、嵌入式linux驱动开发

嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等


Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式。

你可以尝试以下路线:
(1) C语言是所有编程语言中的强者,单片机、DSP、类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握。
推荐书籍:《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。
 

(2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就无所谓了,如果是非计算机专业的就必须找一本比较浅显的计算机原理书籍看一看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。
 

(3)Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。
推荐书籍:《UNIX环境高级编程》(第2版)
 

(4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。


(5) 系统移植的时候,就需要你从最下层的

bootloader开始,然后内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。


(6) 驱动开发
linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。


linux驱动程序设计本质是属于linux内核编程范畴的,因而是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每一部分要详细研究的话足够可以扩展成一本厚书。

以上只不过是大概的框架,在实际的开发中还会涉及很多东西,比如:交叉编译、makefile、shell脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功!
 

嵌入式是一个比较大的概念,有四个分支(主要):

1、微控制器(单片机为例);

2、微处理器(arm为例);

3、dsp(数字信号处理);

4、soc(片上系统);

对于我们初学者而言,首先要学习单片机,以51为代表,等你学好51之后,可以深入学习更艰难的东西;


当然,并不是说你只需要学习单片机;要想学好单片机,你还得学c语言,得学汇编,得学一大堆应用软件;等到单片机能够掌握的不错的时候又需要自己进行原理图、PCB板的设计;还得掌握系统设计的工程管理什么的;比较多。。。。

单片机还是比较简单的,等到学好之后,开始学习arm的时候,你就接触的多了,什么操作系统啊、驱动编写啊、内核移植啊、应用程序的添加啊、上位机的编写啊,,那个就多了,,不过到时候你就全知道了。。。

 

ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: 
(1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) 

(2)必须掌握一个嵌入式操作系统(初步定为uclinux或linux,版本待定) 

(3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 

从事嵌入式软件开发的好处是: 
(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切 入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。

(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。 

(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般 都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。 

(4)兴趣所在,这是最主要的。 

从事嵌入式软件开发的缺点是:

(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。 

(2)这方面的企业数量要远少于企业计算类企业。 

(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。 

(4)平台依托强,换平台比较辛苦。 

兴趣的由来: 
1、成功观念不同,不虚度此生,就是我的成功。 

2、喜欢思考,挑战逻辑思维。 

3、喜欢C语言 

4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。 

5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。 

方法步骤: 

1、基础知识: 

目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。 
科目:数字电路、计算机组成原理、嵌入式微处理器结构。 


汇编语言、C/C++、编译原理、离散数学。 
数据结构和算法、操作系统、软件工程、网络、数据库。 


方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。

thec++programminglanguage(一直没时间读)、数据结构-C2。 

2、学习linux: 
目的:深入掌握linux系统。 


方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深, 那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。


主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。

3、学习嵌入式linux: 
目的:掌握嵌入式处理器其及系统. 


方法:

(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。
      

(2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。 
      

(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友) 
      

主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。 

4、深入学习: 
A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。


B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDM A等。


C、网络与信息安全技术:如加密技术,数字证书CA等。 


D、DSP技术:DigitalSignalProcess,DSP处理器通过硬件实现数字信号处理算 法。
      

说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。 
      

注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。 

不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的! 
      

技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。 

  

嵌入式书籍推荐: 

Linux基础      

1、《Linux与UnixShell编程指南》 
     

C语言基础 
1、《CPrimerPlus,5thEdition》【美】StephenPrata着
2、《TheCProgrammingLanguage,2ndEdition》【美】BrianW.KernighanDav 
idM.Rithie(K&R)着 
3、《AdvancedProgrammingintheUNIXEnvironment,2ndEdition》(APUE) 
4、《嵌入式Linux应用程序开发详解》 

 

 Linux内核 
1、《深入理解Linux内核》(第三版)       

2、《Linux内核源代码情景分析》毛德操胡希明著 

 

研发方向    

1、《UNIXNetworkProgramming》(UNP)      

2、《TCP/IP详解》       

3、《Linux内核编程》       

4、《Linux设备驱动开发》(LDD)      

5、《Linux高级程序设计》杨宗德著 

 

硬件基础 

1、《ARM体系结构与编程》杜春雷着       

2、S3C2410Datasheet 

 

英语基础 
1、《计算机与通信专业英语》 

 

系统教程 
      

1、《嵌入式系统――体系结构、编程与设计》       

2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操胡希明 著       

3、《BuildingEmbeddedLinuxSystems》 
4、《嵌入式ARM系统原理与实例开发》杨宗德著 

理论基础       

1、《算法导论》       

2、《数据结构(C语言版)》       

3、《计算机组织与体系结构?性能分析》       

4、《深入理解计算机系统》【美】RandalE.Bryant DavidO‘‘Hallaron着       

5、《操作系统:精髓与设计原理》      

6、《编译原理》    

7、《数据通信与计算机网络》      

8、《数据压缩原理与应用》 

 

C语言书籍推荐 
      

1.TheCprogramminglanguage《C程序设计语言》 
2.PointersonC《C和指针》 
3.Ctrapsandpitfalls《C陷阱与缺陷》 
4.ExpertCLanuage《专家C编程》 
5.WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCPrograms《编程精粹--Microsoft编写优质无错C程序秘诀》 
6.ProgrammingEmbeddedSystemsinCandC++《嵌入式系统编程》 
7.《C语言嵌入式系统编程**》 
8.《高质量C++/C编程指南》林锐 
     

尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。 这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!!

转载:http://www.embeddedlinux.org.cn/emb-linux/entry-level/201701/02-6070.html#

 













































































































简单实践graphembedding图嵌入的几种方法(代码片段)

...:算法原理、代码实现与应用样例GraphEmbedding图表示学习的原理及应用代码参考:https://github.com/shenweichen/GraphEmbedding本篇简单测试一下该库文章目录1GraphEmbedding几种常见方法1.1DeepWalk1.2LINE1.3nodo2vec1. 查看详情

简单实践graphembedding图嵌入的几种方法(代码片段)

...:算法原理、代码实现与应用样例GraphEmbedding图表示学习的原理及应用代码参考:https://github.com/shenweichen/GraphEmbedding本篇简单测试一下该库文章目录1GraphEmbedding几种常见方法1.1DeepWalk1.2LINE1.3nodo2vec1. 查看详情

嵌入式开发工程师学习线路图

一、核心学习课程  1、应用软件基础      Linux基础      C语言  2、底层驱动程序开发      ARM编程(ARM体系结构、ARM汇编、开发板常见的外设裸机编程)      Linux驱动开发二、Android扩展  ... 查看详情

嵌入式开发工程师学习线路

 一、核心学习课程  1、应用软件基础      Linux基础      C语言  2、底层驱动程序开发      ARM编程(ARM体系结构、ARM汇编、开发板常见的外设裸机编程)      Linux驱动开发二、Android扩展... 查看详情

嵌入式中arm的几种工作模式以及异常模式的优先级

一、Arm工作模式:Arm微处理器支持7种工作模式,分别为:1. 用户模式(Usr)           用于正常执行程序2. 快速中断模式(FIQ)   用于高速数据传输3. 外部中断... 查看详情

峰spring4学习依赖注入的几种方式

一、装配一个bean二、依赖注入的几种方式com.cy.entity People.java:packagecom.cy.entity;publicclassPeople{privateintid;privateStringname;privateintage;publicPeople(){super();//TODOAuto-generatedconstructorstub}publi 查看详情

嵌入式开发中静态代码分析工具的几种功能和用途

...析器有助于提升固件和捕获编译器难以察觉的问题。用于嵌入式的常见代码静态分析工具代码静态分析工具,顾名思义就是对代码进行静待分析,以提前预判(分 查看详情

javascript学习12js中定义对象的几种方式

avaScript学习12JS中定义对象的几种方式  转自: http://www.cnblogs.com/mengdd/p/3697255.html  JavaScript中没有类的概念,只有对象。  在JavaScript中定义对象可以采用以下几种方式:  1.基于已有对象扩充其属性和方法  2.... 查看详情

面向对象类之间主要的几种关系

关注+星标公众号,不错过精彩内容转自 | 嵌入式情报局嵌入式开发虽然平时C语言用的比较多,但面向对象的思维应该是每一位嵌入式软件工程师必备的知识。之前给大家分享过用C语言实现面向对象的内容,也分... 查看详情

面向对象类之间主要的几种关系

关注+星标公众号,不错过精彩内容转自 | 嵌入式情报局嵌入式开发虽然平时C语言用的比较多,但面向对象的思维应该是每一位嵌入式软件工程师必备的知识。之前给大家分享过用C语言实现面向对象的内容,也分... 查看详情

一起学习ml和dl中常用的几种loss函数

摘要:本篇内容和大家一起学习下机器学习和深度学习中常用到的几种loss函数。本文分享自华为云社区《【MindSpore易点通】网络实战之交叉熵类Loss函数》,作者:Skytier。本篇内容和大家一起学习下机器学习和深度学... 查看详情

c++学习(三零二)知识图谱中的几种关系

1、强关系数据库表中同一行的两个知识2、中关系文档中同一段落的两个知识3、弱关系文档中不同段落的两个知识 查看详情

面向对象类之间的几种关系

...43;星标公众号,不错过精彩内容作者|情报小哥来源| 嵌入式情报局1、类之间的关系  类在面向对象程序设计中是一个非常重要的概念,是一系列具有相同属性和方法的对象抽象,那么弄明白类之间的主要关系对于面... 查看详情

嵌入式学习线路

网络上找的嵌入式发展路线,感觉很不错,转载自微信公众号:CodeSheep程序羊,完整pdf可去原贴获取。1.应用领域2.嵌入式方向3.嵌入式相关岗位4.嵌入式编程基础4.1编程语言4.2数据结构和算法4.3操作系统原理4.4计... 查看详情

castlewindsor学习-----installer的几种安装方式

翻译  当使用依赖注入容器时,你首先要向容器中注册你的组件,Windsor使用installers(该类型实现IWindsorInstaller接口)来封装和隔离注册的逻辑,可以使用Configuration和FromAssembly来完成工作。  Installers是实现了IWindsorInstaller接... 查看详情

swift学习笔记——闭包的几种形式

闭包本节主要叙述的是闭包的几种形式,以及闭包的实际作用,闭包是一种自包含的函数代码块,可以在代码中被传递和使用,闭包类似于C++中的Lambda表达式,那么我们先来看看C++中Lambda是怎么回... 查看详情

机器学习的几种分类损失函数

1.机器学习的几种分类损失函数1.1信息量信息量也叫做香农信息量,常用于刻画消除随机变量X在x处的不确定性所需的信息量\\colorred刻画消除随机变量X在x处的不确定性所需的信息量刻画消除随机变量X在x处的不确定性所需的... 查看详情

实现在线预览pdf的几种解决方案(代码片段)

...决方案,有的用PDFJS的在线预览方式,有的使用PDFObject的嵌入式显示,有的通过转换JPG/PNG方式实现间接显示的方式,开始是想通过简单的方式,能够使用JS插件实现预览最好,可是在线预览总是有一些不足,如不同浏览器的兼容... 查看详情