下面是一位嵌入式工程师的涨薪经历,希望可以帮助到你。
01
阶段 1
一、学习本专业知识(电子信息类专业)
二、学习嵌入式软件开发需要的计算机课程(汇编原理,计算机组成原理,操作系统,C语言等)
三、学习嵌入式项目(来源于实验室项目,自己想到的项目以及各种比赛)
关于如何学习嵌入式软件开发:
(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等常规技能问题
02
阶段 2
03
阶段 3
04
阶段 4
来源:知乎 梦人亦冷,编辑:老温
链接:https://www.zhihu.com/question/370606355/answer/1865920389
免责声明:本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!
加入粉丝交流群