高手是怎样炼成的?

小麦大叔 小麦大叔     2022-12-07     309

关键词:

大家好,我是小麦。

很多大学生、初学者总爱问一个问题:嵌入式这条路怎么走?

以下是一位嵌入式高手分享的个人经历,看看钢铁是怎么样炼成的吧,相信会有所帮助。

阶段 1

大一到大三这个阶段我与大多数学生相同:

学习本专业知识(EE专业),

学习嵌入式软件开发需要的计算机课程(汇编原理,计算机组成原理,操作系统,C语言等),

学习嵌入式项目(来源于实验室项目,自己想到的项目以及各种比赛)。

关于如何学习嵌入式软件开发:

① 学习51单片机。

这个阶段你只需要跟着郭天翔的视频去学,只要求实现功能,不求甚解。

但建议能够提出问题,比如“为什么往IO控制寄存器写入特定值能点亮LED灯?”

“IO口的电路结构是什么样子的?”

“什么是上拉下拉,灌电流拉电流?”,

这一阶段主要是熟悉单片机的使用,并且在使用中思考发现问题,还能熟悉一些基本概念。

② 开始查资料看书。

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

③ 开始学习STM32。

随便买个板子,看原子的书跟着一步步去做。

这时候你会遇到很多计算机方面的问题,这时候一边学习教程,一边学习:微机原理,编译原理,操作系统。

你要弄清楚 ARM 架构,弄明白 CPU 如何取指,译码,执行,知道地址总线,控制总线,数据总线如何工作。

要弄明白你编译各个阶段产生的各个文件是什么,什么是分散加载,什么是重定位,什么是代码段,什么是数据段,等等。

弄明白 CPU 如何启动,程序镜像在内存中如何布局。

要知道中断的原理,以及现场保护等等。最后你了解了各个知识点之后,转向 GCC 开发 STM32,这时候你如果知识掌握得不错,你应该可以很快地学会编写链接器脚本并且明白每一条语句所代表的含义。

④ 开始增强 C 语言。

深入挖掘C语言的各个死角。

最好可以做到当你写下一条语句的时候知道编译器会如何处理。

还需要数据结构和软件工程,建议最好还要学习一下设计模式。

开始学习养成良好的代码风格,开始思考代码的结构。

可以说设计模式如果能学好,在往后学习 LINUX 内核时大有裨益。

你会发现 LINUX 的输入子系统有点像职责链模式,会发现 ASOC 音频系统有点像模板方法模式。

私以为,如果能在两个以上不同方面考察同一种编程思想,你会得到更加深刻的理解,更能领会其精华。

⑤ 认真研读 OS 方面的书。

各个知识点都要弄明白,进程是什么,程序是什么,线程是什么,竞争死锁优先级反转,虚拟地址空间物理地址空间,用户空间内核空间等等。

开始学习 ucos,这个没什么可说的,如果在 2 中能熟练掌握各种知识点,知道 CPU 如何中断如何保护恢复现场,那么读ucos 的源码时候,在原理上就不会有什么疑惑。

如果能在 4 中养成把握代码整体结构的能力并且学习好数据结构和基本的算法,读源码就没有什么障碍。

一旦原理弄通了,源码也能读懂,那么吃透 ucos 就是顺理成章的事情。

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

⑦ 进军 LINUX。

学习 LINUX 的基本使用,看赵炯那本内核剖析,啃 LINUX 内核设计与实现,把握总体的内核架构。

之后可以学习驱动,看建议陈学松老师的书,弄明白基本的驱动架构和如何编写简单的驱动,认真对待,这里强调一下设备驱动模型。

最后啃 LINUX 内核源码情景分析,上下两册用心读,这里着重强调一下内核中的 VFS 部分。

之后就是看宋宝华老师的书,进一步学习驱动开发。

最后,看内核源码看内核源码看内核源码。

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

阶段 2

大三到研究生入学前这个阶段我在工作与考研之间无比纠结,并在此期间无数次常思考嵌入式开发到底是什么,如何把嵌入式开发做好,以后该选择怎样的一条职业道路。

为此,像很多人一样,在网上向做嵌入式开发的前辈们咨询过多次。

在这个阶段,我学习了 Linux 驱动开发,并渐渐认识到,嵌入式开发是一个比较偏软件的岗位(我认为大多数学生做的工作都是嵌入式软件开发,而不是硬件开发),

应该深入学习计算机体系结构的知识,而不是把那些无聊的嵌入式相关项目翻来覆去的做(尤其少参加乱七八糟的比赛)。

最终,我选择了读研,想站的再高一点看这件事。

阶段 3

研一进入研究生阶段(2018),当大家都火急火燎的加入 AI 的阵营时,我依然对嵌入式爱的深沉。

选课时,我选择了嵌入式实时操作系统,计算体系结构相关的课程,还看了很多相关的书籍,依然每周保持嵌入式 Linux 的学习。

时不与我,明明选择了做底层的导师,结果导师转做深度学习了,还好是做终端+AI相关的方向,也不算完全偏离嵌入式,这让人多少有点欣慰(毕竟我还是放不下嵌入式的)。

在这个阶段,由于接触了不少的人和事,我越来越认识到,嵌入式只是一个平台,切勿把嵌入式看作一个具体的岗位,无论硬件还是软件。

因此,我对这个岗位以及行业就业现状有了更进一步的认识。

阶段 4

研二到研三在这个阶段,我对狭义嵌入式(驱动,应用开发)完全释怀,

我认为许多人喜欢的嵌入式并不是驱动或者应用等开发,而是对底层系统的一种好奇心与掌控时的快感

与其说喜欢嵌入式,还不如说喜欢的是计算机体系结构。

因此,只要是涉及到硬件的软件开发,我都喜欢,我也将其均定义为嵌入式。

因为嵌入式软件开发就是建立在底层语言,计算机组成原理,操作系统等知识上的一种软件开发,

如果你想将嵌入式开发做好,你就得学好这几门课程 ,如果你学好了这几门课程,底层软件开发工作的岗位你应该都能胜任。

因此,又何必将嵌入式开发狭义的划到驱动开发,XX协议开发之类的呢?

最终,这个阶段我毅然放弃了 Linux 驱动的学习,投入了 Python 深度学习的怀抱中。

我不再关注我到底做的是不是嵌入式开发,只关注和嵌入式平台有没有关系。

我研究的是如何把一个深度学习模型部署到嵌入式平台上去。

有人可能会疑问,这和嵌入式开发有什么关系?为什么没有关系呢?在嵌入式平台上用 C 语言编写神经网络模型的前向推理,这不是把我们的C语言和组成原理的知识发挥出来了吗?

当图像处理程序性能不足时,查看生成的汇编程序,当汇编效率不高时,将 C 语言替换为我们自己写的汇编代码,这还不够嵌入式吗?

其实,当我们把思路放宽后,嵌入式就不再是某一个具体的岗位了,

它有可能是 AI 算法工程师,AI编译器开发工程师,FPGA加速工程师,高性能工程师等等。

原文地址:https://www.zhihu.com/question/370606355/answer/1865920389

作者:梦人亦冷

版权声明:本文来源网络,版权归原作者所有。版权问题,请联系删除

往期推荐

芯片的翻新和造假,人被坑麻了

俄罗斯方块和点阵屏时钟的完美结合

这种项目,最好别接!

C语言的高级用法,面向对象

调试利器!一款轻量级日志库 log.c

神奇的双摆系统

[转]程序员高手是怎样炼成的?

估计很多的朋友在很小的时候就看过奥斯特洛夫斯基同学的《钢铁是怎样炼成的》,偶小时候在农村混,看的最多是各式各样的牛屎以及长得极象牛屎的山头,这些所谓的名著偶直到大学才有机会拜读,但说实话,偶是个俗人,... 查看详情

论spark高手是怎样炼成的

...手可热,轻而易举可以拿到百万的薪酬。而要想成为Spark高手,也需要一招一式,从内功练起:通常来讲需要经历以下几个阶段:  一:熟练的掌握Scala语言  Spark框架是采用Scala语言编写的,精致而优雅。要想成为Spark高手... 查看详情

技术高手是如何炼成的?

郑昀老师的这篇文章《技术高手如何炼成》(直戳进入原文)让我们重温了如何能炼成技术高手,其中谈到的经验,无论对初入职场的新手,还是一位久经沙场的老手,都是值得借鉴的。面试的时候,... 查看详情

王者荣耀是怎样炼成的

王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍王者荣耀是怎样炼成的(二)《王者荣耀》unity安装及使用的小白零基础入门Unity3d引擎原理详细介绍、Unity3D引擎架构设计 查看详情

阿蒙:程序员高手是怎样炼成的?

  首先声明,偶不是高手,以免引起不必要的冷嘲热讽,呵呵。 估计很多的朋友在很小的时候就看过奥斯特洛夫斯基同学的《钢铁是怎样炼成的》,偶小时候在农村混,看的最多是各式各样的牛屎以及长得... 查看详情

废鱼是怎样炼成的!

  初中看的那本《钢铁是怎样炼成的》主人公保尔,经过各种各样生活的磨砺,把肉体给练废了,但他精神永存!但是,虽然我和保尔一样把身体练废了,但是我不仅仅练废了身体,还有我的精神!刚毕业入职现在这个单... 查看详情

存储是怎样炼成的?

...解多少,通过上面的一些名词其实可以大致的看到存储是怎样一步步发展的。其中FAT,NTFS和NFS都是支持特定存储协议的存储系统,DAS,SAN,NAS,OSD是一种存储模型。稍微科普一下:FAT,NTFS大家肯定比较熟悉,这个就是单机文件系统,... 查看详情

“软件设计是怎样炼成的?”实战视频课程

适合人群:软件设计师,用户体验设计师,程序员,系统架构师。课程目标:理解什么是优秀的设计;学会从分析需求开始如何逐步做出实用的软件设计;学会架构设计、数据库设计、用户体验设计和详细设计的实战技巧。课程... 查看详情

ai作画领域中的“神笔马良”是怎样炼成的?

本文由行者AI携手亚马逊云科技共同推出刷爆朋友圈的AIGC是什么?AIGeneratedContent(AIGC,利用人工智能技术来生成内容),是继专业生产内容(PGC,Professional-generatedContent)、用户生产内容(UGC,User-generatedContent&#... 查看详情

ai作画领域中的“神笔马良”是怎样炼成的?

本文由行者AI携手亚马逊云科技共同推出刷爆朋友圈的AIGC是什么?AIGeneratedContent(AIGC,利用人工智能技术来生成内容),是继专业生产内容(PGC,Professional-generatedContent)、用户生产内容(UGC,User-generatedContent&#... 查看详情

黑客教父郭盛华,一代传奇是怎样炼成的?

  1990年,郭盛华生于广东肇庆。初中毕业后,前往肇庆市工业贸易学校,就读中专,学习计算机网络技术。郭盛华把握时机,用平时省吃俭用积蓄的创办了自己的一个小网站,成立了自己的黑客帝国。  时光飞逝,岁月如... 查看详情

一个合格的员工或者管理者是怎样炼成的

以下内容均摘抄自姜汝祥的《请给我结果》这本书:任务是一个执行假象,因为我们绝大多数的人在实际工作中,当你以为你是在执行的时候,其实是在完成任务,因为你没有结果!我们要懂得一个基本道理:对结果负责,是对... 查看详情

这些令人仰望的c++大咖,都是怎样炼成的?

C++语言由于在构建系统软件领域的关键作用而被誉为“皇冠上的明珠”。随着C++20国际标准的正式发布,C++进入全新的里程碑。来自Google、微软、腾讯、华为等业界专家纷纷表示,包括C++20在内的... 查看详情

一个简单rpc框架是怎样炼成的(ii)——制定rpc消息

开局篇我们说了,RPC框架的四个核心内容RPC数据的传输。RPC消息协议RPC服务注冊RPC消息处理以下,我们先看一个普通的过程调用classClient(object):def__init__(self):self.remote=None###内部是托付给远程remote对象来获取结果。defsayHello(self):ifs... 查看详情

快出数量级的性能是怎样炼成的?(代码片段)

前言之前做过一些性能优化的案例,不算很多,还没有失手过。少则提速数倍,多则数十倍,极端情况还有提速上千倍的。提速一个数量级基本上是常态。下面是一些案例材料:开源SPL提速保险公司团保明细... 查看详情

快出数量级的性能是怎样炼成的(代码片段)

我们之前做过一些性能优化的案例,不算很多,还没有失手过。少则提速数倍,多则数十倍,极端情况还有提速上千倍的。提速一个数量级基本上是常态。下面是一些案例材料:开源SPL提速保险公司团保明细... 查看详情

七牛云视频模板sdk:「剪刀手」是怎样炼成的?

成为作家,在博客兴起后不再是梦想,每个人都可以拥有属于自己的媒体;成为摄影师,门槛儿随着手机像素的提高而降低,用iPhone拍摄的照片也能拿下「荷赛」大奖。那么在短视频浪潮汹涌的当下,成为... 查看详情

16年微软/腾讯云/华为云mvp是怎样炼成的

自由、创新、研究、探索,很难想象到一个IT大神的博客,会将“自由”放在第一位,也许这二字代表的,既是精神,又是情怀。搞微软技术的,大家或多或少都有听说过微软的“最有价值专家”(MVP&#... 查看详情