北大硕士7年嵌入式学习经验分享

2023-11-05

大家现在状态是怎么样的?这几年技术进步怎么样,职场晋升,管理水平有没有提升?欢迎留言!

本文内容来自于知乎,觉得内容很不错,分享给大家。下文的我代表的是原作者。

作者:梦人亦冷

链接:https://www.zhihu.com/question/370606355/answer/1865920389

来源:知乎

阶段 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加速工程师,高性能工程师等等。

这些岗位需要的技能与嵌入式工程师极为相似,年薪却最低 30W 起。

为什么?很简单,供需关系决定价格!嵌入式早已江河日下,但嵌入式+某一风口就能迈向高薪之路,这个道理在任何技术领域都是通用的。

2018年-2021年,嵌入式+AI=高薪,未来嵌入式+XX也可以。

至于未来的风口是什么,就要靠我们自己去探索了。只要保证我们自己有核心的知识储备,再学习一下风口相关的技术,立马就能咸鱼翻身。

在视野拓宽后,我去了 2 家大公司实习,后续我陆续收到了很多公司的offer。

里面既有纯算法(计算机视觉)的岗位(50-60W),也有异构计算的岗位(45-55W),也有AI芯片工具链相关的岗位(45W-50W)。

回头看,我好像已经荒废技术好久了,但是好像依旧在嵌入式学习的路上。

a4350e3490335912254be44412aefcfe.png

往期推荐

fa22135e02036ba246f67b9b547e876d.jpeg

是什么决定了硬件工程师的薪资?

b508019e3282242adfa61a02e335381f.jpeg

电池容量怎么算?一文彻底搞懂电池电量监测技术

145803598b60390ba140c95459cd7e61.jpeg

游乐园里,一边带小孩,一边写代码,分享一些有趣好玩儿的嵌入式软硬件资讯

c60eab2039adb768281b411dcf5fb961.jpeg

咱们工程师跳槽,HR 就喜欢听这些离职原因!一起看看怎么回答才比较好

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

北大硕士7年嵌入式学习经验分享 的相关文章

  • 如何避免过度努力带来的负面影响

    在快节奏的现代职场中 我们经常听到关于 努力 的话题 有些人认为 只有通过不断地努力和投入 才能够获得成功 然而 如果过度用力 可能会带来一些负面影响 本文将探讨职场中过度用力的负面影响以及如何避免这些问题 首先 让我们来看一下过度用力的负
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • Linux中的磁盘空间管理:df命令的详解与应用

    在Linux操作系统中 磁盘空间的管理是系统管理员和普通用户都需要面对的重要任务 为了帮助用户更好地理解和管理磁盘空间 Linux提供了一系列工具 其中最常用 最直观的莫过于df命令 df命令 全名为 disk free 它是一个用于显示磁
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

    前言 先来自我介绍 老家农村 家里好不容易把我送到大城市读书 大学非985 211 但在我们老家 能出一个本科大学生也是非常不容易的 因为农村信息的相对闭塞 我对大学专业一无所知 加上分数并非前茅 最后被调剂一个我并不喜欢的专业 这里就不透
  • Java 学习路线 2024 最新版!

    又对上次分享的 Java 学习路线进行了简单修改完善 并增加了免登录下载和黑夜模式 这里重发一下 花了一个月零碎的时间 我根据当下 Java 后端求职和招聘的最新要求 对之前写的 Java 后端学习路线进行了全面的优化和改进 添加图片注释
  • 【性能测试入门】:压力测试概念!

    压力测试可以验证软件应用程序的稳定性和可靠性 压力测试的目标是评估软件在极端负载条件下的鲁棒性和错误处理能力 并确保软件在紧急情况下不会崩溃 它甚至可以进行超出软件正常工作条件的测试 并评估软件在极端条件下的工作方式 在软件工程中 压力测试
  • 半导体洁净车间洁净区装修要点

    随着科技的飞速发展 半导体行业作为电子产业的核心领域 其生产环境的洁净度要求越来越高 半导体洁净车间的装修设计不仅关乎产品的质量和性能 还直接影响到生产效率和成本控制 因此 S ICOLAB喜格 在洁净区装修过程中 必须遵循一系列严格的要点
  • The Planets:Venus

    靶场下载 The Planets Venus VulnHub 信息收集 arp scan l Interface eth0 type EN10MB MAC 00 0c 29 43 7c b1 IPv4 192 168 1 60 Starti
  • 小白也能学会的创建Git仓库实操

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 基于电源完整性的PCB设计原则

    基于电源完整性的一些PCB设计建议 1 尽量减少电源和地通路之间的环路电感 在相邻的层上分配电源和接地面时 使用尽可能薄的电介质 2 通过在平面之间使用尽可能高的介电常数来获得平面之间的最低阻抗 与尽可能薄的介电常数设计保持一致 3 使用尽
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • 储存设备的进化与发展:从传统到现代的飞跃

    随着科技的飞速发展 储存设备作为信息时代的基石 经历了翻天覆地的变化 从最早的机械硬盘到现代的固态硬盘和云存储 储存设备的进化与发展不仅提升了数据存储的速度和容量 还极大地改变了我们的工作和生活方式 本文将带您回顾储存设备的进化历程 并探讨
  • 有效降低信号串扰的PCB设计原则

    降低信号串扰的一些PCB设计建议 1 对于传输线 保持相邻信号线之间的间距至少为两倍信号线宽 2 尽量避免信号跨越返回路径中的不连续点或者空隙 3 如果必须在返回路径中跨越空隙 则尽量使用差分线 4 电容器不是一种低阻抗互连结构 其高频阻抗
  • 如何打赢稳定性之战?

    文章目录 前言 为什么总会出现问题呢 如何证明你的稳定性做的有效果 既是持久战 也是防御战 1 提前建筑好防御工事 2 以攻为守 3 找外部支援和配合 前言 随着23年年末期间 各大厂争先恐后的出现的各种线上
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • AI新年头像模板在哪找?告别单调头像的工具分享

    农历新年到啦 今年的春节假期你有没有弄一些氛围装饰呀 除了每年都有的对联 福字等 经典皮肤 现在也流行起给自己的账号营造一些过年的感觉啦 说到这个 很多人第一反应就是给自己换个新年头像 限定皮肤 不过头像要怎么营造新年的感觉呢 其实用AI工
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作

随机推荐

  • win7系统中装Ubuntu系统

    结合网上经验亲自安装测试通过 故整理备用 一 分离磁盘空间 1 1 选中桌面计算机图标 gt 右键选择 管理 打开磁盘管理 1 2 以D盘为例 分离出50G左右磁盘空间 选中D盘 右键选择 压缩卷 输入需要分离出的磁盘空间 点击 压缩 完成
  • 在极高负荷情况下oracle redolog的配置建议

    在极高负荷情况下oracle redolog的配置建议 在oracle数据库的现有体系结构下 redolog承担了很大的压力 这是因为所有提交给数据库的交易都需要在commite确认前通过LGWR进程将相关信息写入redolog 而一个or
  • 关于我查找了很多资料仍不知道为何不能通过npm安装引入echarts和不能直接引入echarts.js文件这档事。

    通过几番周折 明白了如何通过nodejs下载echarts 包括解决 通过几番周折 明白了如何通过nodejs下载echarts 包括解决这个东西 感觉还是挺有趣的 然后就打算用这种方式来引入了 毕竟已经花了一定时间在上面 网上继续查找资料
  • access按职称计算平均年龄_2012年计算机二级Access考前模拟题及答案(5)

    一 基本操作题 在考生文件夹下 已有 samp1 mdb 数据库文件和Stab xls文件 samp1 mdb 中已建立表对象 student 和 grade 试按以下要求 完成表的各种操作 1 将考生文件夹下的Stab xls文件导入到
  • 中国14岁初中生,开源Windows 12网页版,star数近2k

    出品 OSC开源社区 ID oschina2013 最近在网上冲浪 发现名为 Windows 12 网页版 的开源项目 在网页端实现了 Windows 12 的交互和 UI 项目亮点 精美的 UI 设计 流畅丰富的动画 各种高级的功能 相较
  • 解决Ubuntu 14.04 built-in display 分辨率较低的方法

    打开终端 输入 sudo nona etc X11 xorg conf 将下列代码粘贴复制到终端 Section Monitor Identifier Monitor0 VendorName Monitor Vendor ModelName
  • http://www.msftconnecttest.com/redirect找不到应用程序解决办法

    我在连学校内网的时候 不能自动跳转到登录的页面 因为有一些默认的配置已经被修改 可能有的人认为不是自己修改的 那么原因也有可能是软件安装的过程中默认设置被修改 也有可能是你不轻易间点错了 不废话了 直接发图 第一步 window10 点击左
  • epoll全面讲解:从实现到应用

    epoll全面讲解 从实现到应用 什么是epoll 或者说 它和select有什么区别 什么是select 有的朋友可能对select也不是很了解啊 我这里稍微科普一下 网络连接 服务器也是通过文件描述符来管理这些连接上来的客户端 既然是供
  • 使用 getopt() 进行命令行处理

    使用 getopt 进行命令行处理 轻松处理复杂命令行 文档选项 打印本页 将此页作为电子邮件发送 样例代码 级别 中级 Chris Herborth chrish pobox com 自由撰稿人 作家 2006 年 5 月 25 日 所有
  • 只需单击三次,让中文GPT-2为你生成定制故事

    2019 11 12 12 49 55 机器之心报道 机器之心编辑部 想要 GPT 2 生成中文故事 听听它对各种主题的看法 你可以试试这个中文预训练 GPT 2 项目 它开源了预训练结果与 Colab Demo 演示 只需要单击三次 我们
  • QSettings读取int文件解析失败

    问题 QSettings解析失败 ini文件如下 System name CPMS with IIoT by R Campro Precision Machinery Co Ltd gs sys id CAMPRO gs cod csub
  • AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!

    文章目录 写在前面 突破图像处理难点 扫描全能王的独特优势 耳听为虚 眼见为实 产品背后的主要核心 AI Scan助力 深度学习助力智能文档处理的国际化进程 品味智能文档处理的轻松与精准 写在前面 在数字化快速发展的今天 我们时常会遇到需要
  • 产品经理漫谈四

    每几天一篇 业界学习知识分享 请关注 如有同感请加vip阅读 产品经理如何给足一线 渠道 区域销售足够信心 思考 人性 商业 利益共同体 尊重时效 尊重承诺 价值方向 行业动态符合 具有更大兼容性 服务体系建立 笔者认为 除了产品包含市场方
  • 芯片验证从零开始系列(三)——SystemVerilog的连接设计和测试平台

    芯片验证从零开始系列 三 SystemVerilog的连接设计和测试平台 接口interface modport 验证环境结构 激励发生器 监测器 检测器 测试平台和设计间的竞争原因 断言 总结 声明 未经作者允许 禁止转载 推荐一个IC
  • AD域服务器下如何批量创建用户及修改AD域的最大返回条目数。

    最近在用户现场遇到一个问题就是通过ldap导入用户 发现导入失败 经过分析得知是AD域服务器设置的最大返回条目数默认为1000 当数据超过1000 通过ldap search s获取数据时就会异常 通过抓包分析得知是 报文回复不全导致无法解
  • 史上最全 App功能测试点分析

    1 2测试周期 测试周期可按项目的开发周期来确定测试时间 一般测试时间为两三周 即 15个工作日 根据项目情况以及版本质量可适当缩短或延长测试时间 正式测试前先向主管确认项目排期 1 3测试资源 测试任务开始前 检查各项测试资源 产品功能需
  • [k8s]笔记01

    1 k8s是什么 k8s是一套自动化容器运维的开源平台 2 k8s可以做什么 能在物理机或虚拟集群上调度和运行程序容器 快速精准地部署应用程序 即时伸缩应用程序 无缝展现新特征 限制硬件用量仅为所需资源 3 k8s概念 1 Cluster集
  • java8新特性从入门到应用 第二章 Streams数据流

    java8新特性从入门到应用 第二章 Stream 数据流 特点介绍 Stream组成 源 中间操作 筛选与切片 映射 排序 Stream的终止操作 查找与匹配 归约 收集 Collector 接口API 此流非彼流 估计第一眼看到这个标题
  • springboot定时任务出错 Unexpected use of scheduler.

    最近在使用springboot的定时器写定时任务时 项目启动就会报以下的错误 java lang IllegalStateException Unexpected use of scheduler 困扰了很久 因为以前也写过定时器 但没遇到
  • 北大硕士7年嵌入式学习经验分享

    大家现在状态是怎么样的 这几年技术进步怎么样 职场晋升 管理水平有没有提升 欢迎留言 本文内容来自于知乎 觉得内容很不错 分享给大家 下文的我代表的是原作者 作者 梦人亦冷 链接 https www zhihu com question 3