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

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李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-08-03 15:30:30

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

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

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

【深度学习看手相】台湾学生获奖 AI 项目是科学还是伪科学?

AI的颠覆已经蔓延到了"看相界":从不久前闹得沸沸扬扬的人脸识别定罪犯,到最近的看人脸断贫富,再到今天要介绍的"深度学习看手相". 近日,台湾大学举办的一场黑客马拉松(黑客松)比赛上.一位名叫Claire Ching Chen的大学生与实习的同事.大学朋友以及brother 联手开发了一个用于看手相的聊天机器人,名叫Handbot,可通过Facebook Messenger调用. 不过,新智元到Facebook主页上想试用这一聊天机器人时,发现它已经被停用了. 项目

java后台有啥好书看,我是学技术流的

问题描述 java后台有啥好书看,我是学技术流的 java后台有啥好书看,我是学技术流的,想多看看书,还有数据库, 解决方案 基本的:重构 改善既有代码的设计,headfirst设计模式 高级的:Java并发编程实践,深入java虚拟机 这些都是最根本的. 有些网站上的文章可以多看看,都很有帮助,比如ifeve.com,上面有不错的文章和译文. 解决方案二: http://bbs.csdn.net/topics/380228140 解决方案三: 想学技术,去学c吧. 解决方案四: Java方面的

《嵌入式C编程:PIC单片机和C编程技术与应用》一第3章预编译指令3.1 标准预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第3章,第3.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 第3章 Embedded C Programming: Techniques and Applications of C and PIC MCUS 预编译指令 编译器对C程序的处理可以明确地分为两步.第一步由预编译器完成.以#开头的预编译指令可能会影响编译器设置或者进行

《嵌入式C编程:PIC单片机和C编程技术与应用》一第1章C语言概述和程序结构1.1 C源代码

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 第1章 Embedded C Programming: Techniques and Applications of C and PIC MCUS C语言概述和程序结构 1.1 C源代码 下面是一段C语言源代码: 这段代码初看起来可能会觉得难以理解,但读完本书并完成书中

《嵌入式C编程:PIC单片机和C编程技术与应用》一2.3 三字母词

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第2章,第2.3节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 2.3 三字母词 C语言中有些过时的元素,由于它们仍存在于规范中,因此我们仍然要保证其兼容性(如八进制).并不是所有的键盘都含有C语言的特殊字符,例如,如果你的键盘看起来像图2-7中的那样,就无法输入-.解决方法就是使用"三字母词"(tri-grap

CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象的动态语言,有java的影子,有C的味道,中间有比其它语言多的糟粕,使用预处理办法可以解决这些问题.其中Less[les]与Sass是CSS的预处理技术,而CoffeeScript.TypeScript则是javascript的预处理技术.  一.Less 1.1.概要 Less是一种动态样式语言,

快看Sample代码,速学Swift语言(1)-语法速览

Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超前的语言非常感兴趣,之前也在学习ES6语法的时候学习了阮一峰的<ECMAScript 6 入门>,对JavaScript脚本的ES6语法写法叹为观止,这种Swift语言也具有很多这种脚本语法的特点,可以说这个Swift在吸收了Object C的优点并摒弃一些不好的东西外,同时吸收了大量新一代语言的

《嵌入式C编程:PIC单片机和C编程技术与应用》一1.8 时间

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.8节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 1.8 时间 在delay_ms中,ms表示毫秒(milliseconds).编程中常用的时间单位有: ns ?nanosecond(纳秒) ??0.000?000?001s μs ?microsecond(微秒) 0.000?001s ms millisecond(毫