关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李brooks,~的网友对此进行了总结,我个人觉得非常好,还有其他两位网友li
crifan
Tony
Ho
,毕竟我工作以来也还有好多东西没有接触,就有他说的那些中的部分内容,我们来看看他们说了什么内容:

有一位大学生四年级的网友提出这样的问题:

本人大四学生,专业为电气类的,有C语言,单片机,模电,数电的基础,一直想从事嵌入式方面的工作(感兴趣),但是以目前的水平,暂时还不能找到这方面的工作,所以一直在纠结是先找份本专业的工作做着,又或者是到培训机构培训,然后找份嵌入式方面的工作,希望大家能指点一二。另:嵌入式学习需要哪方面的基础知识,培训四个月的时间努力学习大概能达到什么样的水平。

以下为解答:

第一位:李brooks

著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

作者:李brooks

链接:https://www.zhihu.com/question/22252234/answer/75026117

来源:知乎

不请自来。做电赛出身的程序猿一名,目前从事嵌入式Linux驱动开发。还有单片机从51到意法Ti都做过,DSP只用过TI的,主要是在开关电源控制方面的应用。建议学习路线:

1 学习51单片机,这个阶段你只需要跟着郭天翔的视频去学,只要求实现功能,不求甚解。但建议能够提出问题,比如“为什么往IO控制寄存器写入特定值能点亮LED灯?”“IO口的电路结构是什么样子的?”“什么是上拉下啦,灌电流拉电流?”,这一阶段主要是熟悉单片机的使用,并且在使用中思考发现问题,还能熟悉一些基本概念。

2 开始查资料看书,看模拟电路数字电路等等,开始去弄明白1中所提出的问题。这时候问题主要集中在电路方面。

3 开始学习STM32,随便买个板子,看原子的书跟着一步步去做。这时候你会遇到很多计算机方面的问题,这时候一边学习教程,一边学习:微机原理,编译原理,操作系统。你要弄清楚ARM架构,弄明白CPU如何取指,译码,执行,知道地址总线,控制总线,数据总线如何工作。要弄明白你编译各个阶段产生的各个文件是什么,什么是分散加载,什么是重定位,什么是代码段,什么是数据段,等等。还要能弄明白CPU如何启动,程序镜像在内存中如何布局。要知道中断的原理,以及现场保护等等。最后你了解了各个知识点之后,转向GCC开发STM32,这时候你如果知识掌握得不错,你应该可以很快地学会编写链接器脚本并且明白每一条语句所代表的含义。

4 开始增强C语言,深入挖掘C语言的各个死角。最好可以做到当你写下一条语句的时候知道编译器会如何处理。还需要数据结构和软件工程,建议最好还要学习一下设计模式。开始学习养成良好的代码风格,开始思考代码的结构。可以说设计模式如果能学好,在往后学习LINUX内核时大有裨益。你会发现LINUX的输入子系统有点像职责链模式,会发现ASOC音频系统有点像模板方法模式。私以为,如果能在两个以上不同方面考察同一种编程思想,你会得到更加深刻的理解,更能领会其精华。

5 认真研读OS方面的书,各个知识点都要弄明白,进程是什么程序是什么线程是什么,竞争死锁优先级反转,虚拟地址空间物理地址空间,用户空间内核空间等等。开始学习ucos,这个没什么可说的,如果在2中能熟练掌握各种知识点,知道CPU如何中断如何保护恢复现场,那么读ucos的源码时候,在原理上就不会有什么疑惑。如果能在4中养成把握代码整体结构的能力并且学习好数据结构和基本的算法,读源码就没有什么障碍。一旦原理弄通了,源码也能读懂,那么吃透ucos就是顺理成章的事情。

6 自己仿照ucos写一个stm32上的实时os出来。

7 进军LINUX。学习LINUX的基本使用,看赵炯那本内核剖析,啃LINUX内核设计与实现,把握总体的内核架构。之后可以学习驱动,看建议陈学松老师的书,弄明白基本的驱动架构和如何编写简单的驱动,认真对待,这里强调一下设备驱动模型。最后啃LINUX内核源码情景分析,上下两册用心读,这里着重强调一下内核中的VFS部分。之后就是看宋宝华老师的书,进一步学习驱动开发。最后。。。。。。。看内核源码看内核源码看内核源码。

8 其它的什么SPI,IIC,什么DMA,都只是技能问题,只要知识学的好,技能想咋点就咋点。

9 暂时没想到其它的了。想到再说

第二位:li
crifan

著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

作者:li crifan

链接:https://www.zhihu.com/question/22252234/answer/20769642

来源:知乎

现已整理出教程,详见:

1.先看:

嵌入式软件开发

搞懂嵌入式软件方面的知识。

2.如果打算做驱动方面的开发,那么再去看:

嵌入式驱动开发

3.如果是和Linux有关的嵌入式,则再去看:

嵌入式Linux软件开发

4.如果和Linux驱动有关,再去看:

嵌入式Linux驱动开发

========================================

目前对于嵌入式培训的质量,不是很清楚。但是根据个人的了解,貌似质量高的不多。

所以,鉴于你的基础,推荐你:

先找自己专业的工作,有了相对稳定的生存的基础了。然后再抽时间,自己学习嵌入式。

关于自学嵌入式的话,需要具备哪些基础,如何循序渐进的学习嵌入式等方面的问题,说实话,很难几句说清楚。但是,我会尽量说的让你能看懂:

【如何学习嵌入式】

基于此,我也是正在,一点点的完善我要写的,关于如何学习嵌入式的教程。

主体思路,和目前已经写了的部分的内容,如下:

1.说清楚整体嵌入式行业的概况,应用领域,举例说明。

2.然后通过一些典型的你所能接触到的产品,去说明嵌入式行业领域的产业链。

3.然后你才能搞清楚,你作为嵌入式软件开发者,所处的位置。

4.然后你才知道,你需要做大概哪些方面的软件工作,以及和其他产业链和合作人员的关系。

5.搞清楚所处大环境的位置,才是去如何搞嵌入式软件开发。

相关内容:

嵌入式开发之嵌入式背景知识

【整理】嵌入式软件知识体系概述

6.才是介绍需要大概哪方面的基础知识

相关内容:

【整理】类比解释:嵌入式开发需要掌握哪些知识

7.然后才是,对于典型的一些嵌入式软件开发,是如何搭建开发环境,如何一点点开发。

相关参考:

(1)之前遇到的一本,解释的大而全的,嵌入式开发方面的书籍:

Embedded.Systems.Architecture_免费高速下载

此书算是说的不错了,不过是英文的。如果英文还行,建议多看看,即使看不全懂,也可以看看其大概框架,以便对于嵌入式开发有个概念。

(2)

嵌入式开发之基本概念和开发逻辑

(3)

【问题解答】用一个嵌入式开发板去实现数据采集的基本思路和逻辑

8.然后才是解释具体的某个领域开发的真正的逻辑和流程,比如嵌入式linux驱动如何写,等等。

相关参考:

(1)

嵌入式开发系列教程

(2)之前给别人推荐的这本书:

Linux设备驱动开发详解

总之:

目前:上述的部分的帖子,部分的推荐书籍,你凑合先看吧。

以后:关于嵌入式开发方面的,从逻辑概念到实际动手操作,以后我会抽空去完善出全套的教程的,去详细解释的方方面面的事情的。到时候,再看我的教程,就会很清楚了。

【其他一些嵌入式相关的内容】

1.解释了一些嵌入式领域内常会遇到的基本概念:

【整理】嵌入式领域的名词概念解释

2.总结了些经验:

【整理】嵌入式开发经验和心得总结

3.上次给另外一个人回答了类似的问题,你也可以参考参考:

关于嵌入式驱动的学习?

【最后】

我一直正在陆陆续续的写嵌入式方面的内容,如果写好了,都会发布到我自己的个人网站上面对应的嵌入式分类中的:

Embedded | 在路上

换句话说,如果感兴趣,可以时不时的去看看,可能就会看到我更新的一些,关于嵌入式方面的帖子。

其中,可能有些是嵌入式领域教程方面的介绍的内容,有些可能是具体某个嵌入式知识点方面的内容。你捡你感兴趣的看,即可。

第三位:Tony Ho

花了一张图,厚着脸皮贴一把,以后我会将各个技能树的学习顺序与参考学习资料整理一下:

关于博主本人建议:

本人也是出自于嵌入式培训而才顺利找到工作的,但是在没培训之前还没知道过这么多,因为大学知识毕竟有限,而且我本人还是普通大专学生,读的是电子信息工程,见识短浅,当时只是知道几种单片机和ARM,没有扎实的专业知识,但是就是借着培训这个平台长了见识才能顺利走上嵌入式开发这条路,后来自己工作后不断的补充新知识,还是有所长进。培训有利有弊,当然,你有能力你可以自学成才,别浪费大学几年的时间,做嵌入式的,英语必须是要好的,C语言,数据结构,操作系统等理论知识都要具备。自制力差的,选择培训也不错,但是要能坚持,毕竟4个月的学习等于你需要掌握大学将近好几年的东西,不易啊,而且学费也不便宜,一般都要15000以上,因为这四个月是纯粹的学习技术核心知识,而不是跟大学一样有许多空闲时间和其它非技术相关的知识的学习。所以,且学且珍惜,如果本文能为各位初学者带来帮助,请感谢知乎三位大牛。

时间: 2024-12-05 14:50:03

关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)的相关文章

嵌入式初学者学习嵌入式必看必看书籍

嵌入式初学者学习嵌入式必看必看书籍列表,有电子档的同学可以共享出来,谢谢 Linux基础  1.<Linux与Unix Shell 编程指南>  2.<嵌入式Linux应用程序开发详解> C语言基础  1. The C programming language <C程序设计语言>  2. Pointers on C    <C和指针>  3. C traps and pitfalls   <C陷阱与缺陷>  4. Expert C Lanuage

嵌入式工程师学习路线

参考:嵌入式工程师学习路线 关于这个方向,我认为大概分3个阶段:1.嵌入式linux上层应用,包括QT的GUI开发2.嵌入式linux系统开发3.嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE.VxWorks等等Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式. 所以你可以尝试以下路线:(1) C语言是所有编程语言中的强者,单片机.DSP.类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握.推荐书籍:<The C Pr

[转] 嵌入式入门学习法(写给惠州学院电子系学嵌入式的同学们)

我是08届惠州学院电子系的毕业生,现在从事于linux嵌入式研发工作.本人写这一篇所谓的“嵌入式入门学习法”,是因为自己一开始学习嵌入式的时候,电子系里几乎没有人可以带自己入门或者教授相关学习方法,基本上都是自己摸索着学习,可想而知,这过程蛋疼的程度让人想死.所以希望通过这一年来自己的学习,整理出一条学习路线给以后电子系的师弟们作参考. 废话不多说,进入正题.首先大家应该理解两个概念,什么是处理器,什么是控制器.相信很多电子系的学生,一开始是从玩51单片机开始进入电子研发领域的,再者就是AVR单

嵌入式Linux学习笔记(基于S5PV210 TQ210)

基于S5PV210.TQ210平台. 本文更多的是教会大家如何学习! 包括如下内容: 1.前言 2.开发环境搭建 3.制作交叉编译器 4.裸机编程 4.1.汇编学习 4.2.S5PV210启动流程 4.3.点亮一个LED 4.4.串口 4.5.实现printf 4.6.时钟配置 4.7.重定位 4.8.DDR 4.9.NAND读写 4.11.LCD操作 5.移植u-boot(基于u-boot-2014.4版本) 5.1.概述 5.2.u-boot配置过程分析 5.3.u-boot编译过程分析 5

新手嵌入式linux学习必备书籍

很多的嵌入式Linux新手,对自己的学习过程十分迷茫,不知道从何学习?学习过程中需要看哪些相关书籍?之前的写的一篇关于嵌入式开发如何入门,如何深入?的文章希望对你有所帮助,接下来就为嵌入式Linux新手们推荐一些关于嵌入式Linux学习的核心书籍. Linux基础 1.<Linux与Unix Shell 编程指南> C语言基础 1.<C Primer Plus,5th Edition>[美]Stephen Prata著 2.<The C Programming Languag

嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )

发现放到Blog之后排版全乱套了.. 已经把PDF上传到资源页了  http://download.csdn.net/detail/lyy289065406/8934637 那边排版好看一点...看官们随意吧 >...< · 目 录 导 航 1. 引言 1.1. 编写目的 1.2. 阅读范围 1.3. 声明 1.4. 缩写词/名词解释 1.5. 参考资料 2. 嵌入式开发学习笔记 2.1. 开发环境/测试环境 2.2. 开坑:提要 2.3. 入坑:JNI 2.3.1. navicate 接口定

嵌入式驱动学习笔记

驱动学习笔记 输入子系统概念介绍 嵌入式驱动学习笔记,布布扣,bubuko.com

嵌入式Linux学习笔记之LED驱动

最近在学习嵌入式Linux驱动开发,大致了解了驱动的基本开发流程,本文主要针对字符设备驱动开发做一个简要介绍,也当作是对这几天工作的一个小小总结. 计算机系统是由软硬件相互协调共同完成工作的,作为专用计算机系统的嵌入式系统也不例外,既要有CPU.SDRAM.FLASH.IO等硬件,同时也少不了操作系统和应用软件等软件的支持,而作为应用程序与硬件的桥梁--驱动程序,是整个嵌入式系统开发过程中的关键环节.驱动开发涉及底层,而了解底层作用机制对于整个系统的开发意义重大. Linux内核中有60%以上是

有趣的前端题目,看了不后悔

今天在前端群里面和群友讨论了一下几道自己遇过的前端题目,虽然是小题目,但是还是挺好玩.所以今天还是写下来,和大家分享一下. 1.一道大概4年前遇到的题目,知识点简单,但是新奇又好玩. 题目:有一个div 宽和高都是250px: 只要往div里面加任意的四个div,里面的div宽和高都会是原来50%,分别在左右上下:任意加div,就会向四个角延伸.同时,整个div是垂直水平居中浏览器. 如下图 图解:任意添加div,就分别向4个角延伸 下面是出代码,想试试的同学记得先不看代码啦. <!doctyp