我是老温,一名热爱学习的嵌入式工程师7 d q) s8 R6 \+ c2 z3 R5 V
关注我,一起变得更加优秀!四年前写的文章,重新分享一下。
" U; a7 l: c* ]& y% d3 H在分享我的学习过程之前,先交代一下我的工作经历和学习背景。
% y, m' {- O, h" K% I3 q& x我是从2020年11月初开始学习RT-Thread实时操作系统的,在学习RT-Thread之前,我接触过uCOS和FreeRTOS,
0 N: O8 I( q; _/ X7 N4 |但这两个在单片机上应用的实时操作系统,我都没有仔细并系统化地进行学习,都只是局限于开发板上运行一下demo例程。
1 | C! A! L$ \3 {' P以前我在嵌入式开发板公司工作的时候,曾经系统化地学习过Linux驱动程序,当时是买韦东山老师的2440驱动教程,+ m2 Y) F- D, H8 p$ t, d
不过很遗憾,一直没有从事过Linux驱动开发相关的岗位,学过就丢到一边了,但正是因为这段经历,让我明白了建立抽象思维的重要性。
, a& |3 ^3 l' K- R) u; h, M我曾经使用嵌入式Linux操作系统,开发过两个应用项目,以前为了协助生产,也用操作系统做过一些桌面工具,
! w8 r* r3 V5 n3 `# A所以,对于使用操作系统开发,里面涉及到的一些概念,比如多线程,内存管理,线程间同步与通信,等等,理解起来也相对容易。
$ T0 d9 Z0 ~) y以上就是我学习RT-Thread之前的工作经历和学习背景。! G2 n+ z# L! J5 i/ H7 c/ O& _
经过差不多两个月业余时间的学习,我已经把RT-Thread内核应用相关的知识系统化地学习了一遍,并且同时写了一些学习总结文档,如下图所示,& o0 n; j. w3 h7 V0 |; r0 v
并且在公众号做成了 专辑 | RT-Thread学习笔记 ,公众号回复【技术文档】即可下载PDF。. A8 `! y' `- u; ]( J- n5 {
ei1313gwn1x64023336638.png
1 A) c' }4 B: h0 P0 a: ?2 v
先用思维导图总结概括一下,学习方法不一定适用于每个人,但希望可以给你一些参考。% j" z- L; b3 F3 P8 [' V+ z
ffzpyce2l5464023336738.png
5 A. I% [' P7 a9 s2 Y8 g
明确利益目标
. N2 {+ e3 S/ X3 `* T4 j参加工作后的学习或自我提升,其目的已经不像在大学校园里面那样单纯,大学里面基本都是学院安排好的学习计划,而作为学生,只需要按计划执行就可以了。% G4 o8 \+ {# @) h2 \
可以说,很多大学生受限于社会经历,也不知道为啥要学习这门课程,他们只是知道这是学院要求的。5 l) _! I& |* D; a
参加工作后,个人的学习和提升,都是有目的的,人性都是趋利的。
$ [' \; V# r" B. ^* G' n! X你基本不可能做到不带任何目的而投入大量的时间去学习一门技能,就算是因为兴趣爱好而学,那也是为了自己的内心满足感,9 s8 l8 c% J6 x% H. o! ]! {% ]: R
“寻找内心满足感”也是一种目的。
$ m. w* z$ F/ \2 l1 a6 K1 Q而对于大多数职场打工者的自我学习提升,无非只有两个目的:名和利。9 | i5 M0 m( N8 v
所以,在学习RT-Thread操作系统之前(其实也不局限于RT-Thread,包括很多职场技能也是如此),要先搞清楚自己为什么要学这门技能,要有明确的利益目标。* t. B# W2 u4 C# A: N& Q
如果想不明白这个问题,只是道听途说地觉得RT-Thread或某项技能很火,也想跟风学习一下,那还是不要贸然浪费时间,因为漫无目的的学习,会很难坚持下去。
5 d5 M( v% p" f9 T/ X, F那么,我学习RT-Thread的利益目标是什么?
+ ^7 i1 [. S+ d# \其实很简单,是为了公众号有素材可写,同时建立自己的技术背景和人设,然后积极拥抱开源社区,认识不同行业的技术大佬。
$ F {7 T. ~: a. H通过这种学习总结+持续输出的闭环,可以让自己技术得到提升的同时,也让自己链接更多优秀的人才,如果自己能帮助更多的人,那就更加perfect了。
" m2 [' ~0 [! Y+ x
ar2m24y4uor64023336838.png
" Y2 [6 K6 @: n$ k6 Y) i: w' P7 E- W' W这种持续的学习总结输出,也为我以后求职增加了筹码,呈现给对方公司的,不再是一纸枯燥的简历,可以是我的技术博客,公众号,GitHub,开源作品,等等,这也是我的利益目标之一。
4 K, V$ K- I% _" M如果你还不知道如何搞清楚自己学习的利益目标,那就要先花时间好好想清楚了,而对于大多数职场打工人来说,学习技能最直接的目标,就是为了跳槽好找工作。
# d5 O& `9 Y5 ` A可以把跳槽当作利益目标之一,但是别忘了,最好还是要通过展示手段,把你所学到的技能呈现到对方公司面前,而不是把技能都写在一纸简历上面。2 R0 E4 U% p2 T$ V8 n
弄清基本概念
; z& D9 b- M0 ]: v: E文章里面的每一段话,是由字词句三者组成的,就像我们初中高中学习阅读理解的时候,分析一段话的含义,都是从字或词开始进行分析(文言文翻译简直是一段痛苦的经历)。
e' F' c2 \! i3 u所以,要学习RT-Thread操作系统,就需要先弄清楚操作系统的基本概念。
& P2 {$ E# V; X1 J$ p; ~; ?这些基本概念,在操作系统里面基本上都是相通的,不管是实时操作系统还是多任务分时操作系统。/ V C( C% p3 T% s
(在你看这段话的时候,脑海是不是也会有疑问,什么是多任务分时操作系统?)
/ X# t% _! r( z a7 M" J) i; b为什么会看不懂一段话,无非就是组成这段话的词语概念不理解,不妨看看下面一段话,里面红框部分都涉及了各种概念,而这些概念如果你不懂的话,是看不懂这段话的。
8 ^) [1 I% v" o' _- s+ N
3xzan1yui1h64023336938.png
+ w* [. Y) e( M: d9 M短短几句话里面,就包含了很多操作系统的概念,什么是线程调度器?什么是抢占式?什么是最高优先级?什么是中断服务程序?等等。。。
+ f$ h5 j$ H0 z! R+ l0 E9 E8 p而我能很容易看懂这几句话,是因为我有了以前的学习经历作为铺垫。
, i3 {( }/ T* r5 [2 ^那么,在我们平时的学习中,如何搞懂这些基本概念呢?教大家一个比较实用的方法,就是在网上搜索的时候,在前面加上“如何通俗地理解xxx”,比如,“如何通俗地理解多线程”,网上就会有不少结合生活事例的参考答案。
' o3 A5 `2 l, u* ~8 [/ Z
1r3aujffohp64023337038.png
; t. z C. A9 j( T L ^( A9 L
现在终于知道为啥语文数学外语这些科目可以贯穿整个学业生涯了,学习语文可以锻炼我们的阅读理解能力,而数学可以让我们建立逻辑推导能力,学习外语,是为了在经济全球化的背景下,让自己更好地和世界交流。
- a" v" q- u0 C& z( O- d1 t建立抽象思维
; O7 p0 x& w8 q7 N) n为什么要建立抽象思维?人为什么能通过阅读文字或观看图片和视频来获取知识?
$ h a0 T7 f6 R原因就是,一个人在接收外界信息的时候,会在自己的大脑里面建立一个具体的事物影像,这个具体的事物影像在构建的时候,会依赖于你自身的社会经历以及知识丰富程度。1 W6 f; |: M7 H E
回到如何学习RT-Thread这个话题上面,我在学习RT-Thread的时候,首先参考的是其官网提供的学习资料,而这一大堆学习资料里面,我首先关注的,肯定是RT-Thread这个操作系统的简介和框架。' d3 y! h' x2 W- t
2jrxiolv15z64023337138.png
4 Q$ U$ d; U# k) m- i3 G千万不要一开始就去看系统源码,也不要马上去运行demo例程,在你的大脑建立RT-Thread这个影像框架之前,看这些源码,无疑是想自己劝退自己。
6 g1 I! r* n8 D& M( y$ ~. i为什么要先看简介和框架?
1 F9 e1 v v a( u因为这个框架可以有助于我建立一个关于RT-Thread的大脑影像,往后不管我学习RT-Thread的哪一块内容,都是基于这个框架的,框架是用来告诉我们,里面的代码以及模块是如何进行组织的,所以,框架很重要!
$ a& G% U9 E- }+ B: o7 d7 a; F: ]0 G细心的人就会发现,即使是这个框架介绍,里面也涉及了很多基本概念,这样又回到了“弄清基本概念”这个环节。所以,这是一个螺旋式的过程,不断弄清概念,建立大脑影像,如此往复循环。
; G8 V9 S4 z1 n3 t( X9 j8 [当你要去看操作系统代码的时候,面向对象的思维,肯定是必不可少的,这又回到了“什么是面向对象?”这个问题上了。
8 [* D; R% m( p/ M: f! b6 x我相信,通过网络搜索,你一定会基本明白什么是面向对象,接下来就是C语言如何实现面向对象了,具体可以查看以下文章。+ B* [& W7 {) `" n0 l
嵌入式 C 语言面向对象编程 --- 总结, J6 r# _/ v d/ q8 @7 ~' o8 E
基于状态机和面向对象的思想,设计一个通用的按键检测模块。% I1 X/ }- T5 v
如何建立抽象思维?这个问题实在太难回答了。( V, w# i! M" i" k, h7 F
抽象思维的建立,不是一朝一夕的事情,它需要周而复始地保持一种对世界好奇的学习心态,而且很大程度取决于你的人生经历和知识体量,2 H# |( e8 V; K: H2 J; r
我能给出的建议就是,多阅读经典书籍,多观察这个世界,多总结和思考,多于不同行业的朋友交流。
& X. g. n8 L3 s6 F- l持续总结输出
/ B! X4 R g4 g1 |5 y& f为什么我现在那么喜欢写文章?为什么我一直建议各位持续总结输出?3 _ f" H) ^# F2 k# A
这是因为,一个人的认知象限里面,有以下四种状态:不知道自己不知道、知道自己不知道、不知道自己知道、知道自己知道。! [# v6 N1 |& f- x M* ]5 a
关于这四种认知状态的说明,在网络上面有很多解释,这里不做重复描述。
. k u3 p# o, v t f$ Y持续地通过技术文章进行输出,可以让一个人理清自己的学习过程与学习状态,这种方式可以让一个人搞清楚学习过程里面,哪些是自己知道的,哪些是自己不知道的。
2 P8 R6 }' x/ ]( E4 A: k! u我相信,很多人在最初学习一个新知识点的时候,通常都是处于“不知道自己不知道”的状态,也就是不知道自己哪些地方不懂,自然就不会向别人提问。; X) F5 b3 E& q# _- o
“好记性不如烂笔头”这个道理,我相信很多人都懂。我在2015年学习Linux驱动的时候,就开始用记事本零散地记录自己的学习过程,那时候,还没学会系统化地进行技术文章组织和输出。
) x% O" U- X4 ~
zbrrfst1k2y64023337238.png
& h6 P0 e# U7 p2 q
直到最近这两年决定写公众号和博客,才明白系统化知识的重要性,所以公众号和博客的写作风格,都是通过技术专辑的方式来呈现,1 G& o- ` E9 b3 B
一方面是为了让自己学习不会太片面,同时让网络上的知识碎片能尽可能集中一点,方便以后自己查阅,如果能给你带来一些帮助,那是对我莫大的鼓励。* A- b; K l# i- P5 p" g
这种持续的总结输出,会给我带来一些正反馈作用,让我认识了很多优秀的同行,同时也希望我的学习总结,能给其他嵌入式的初学者带来一些参考,
$ t1 S: l# L* A: r. e {& [以上就是我的学习方法论,关于我的从业经历和职场感悟,也可以在公众号获取我的个人微信,跟我一起互相交流,共同进步。6 c0 n0 F% x6 h4 H* n& d A
感谢阅读!
2 R& I1 p" i, Z& S# r-END-
' i+ q) {7 ?/ H* d9 s) j往期推荐:点击图片即可跳转阅读5 ?( Y8 S2 }* u/ a" C$ `6 {
- D* z. M7 N5 x/ ]( w2 v" Z+ @
8 R8 T4 g& W" }4 M v/ M$ S5 K4 `- F$ r
( E( O8 U* T7 Y% X# v/ m- x) o* m5 s
2 ~5 a9 e( j Q- f4 k
04njsfmhac164023337338.jpg
; p+ \, C% ^ N6 y& w2 E+ `5 Q * o% t1 {- a7 z$ T5 H8 v
【5折福利】选型必看!这款RK3588开发板究竟有何魅力?
: Q; K- u9 [2 f( K, J
* J q/ k: x9 {$ d/ y! I. b 0 C, D7 S5 ~5 p) u
2 q! {: l5 f& u& I1 x & Q% k' D4 o# R; E
i105xhqsxi564023337438.jpg
% t1 Q2 g. ~, J2 j
/ [$ v# f. R) C" f! ` 这两种 C 语言语法,建议别用,不然会被骂惨!9 s3 ^& O+ @& O
7 a9 l: H! A H# w# S 5 J+ n$ y' K& W; d0 A' i
1 u) H( ~8 l5 l7 w6 I+ Q8 b, I5 a0 o, G
fbvwqpajw2464023337538.jpg
9 q2 @! |" b: Q
, L$ E/ K9 w9 D1 B, `
嵌入式 C 语言,那些“花里胡哨”的语法特性。* {: d2 J0 V3 V4 h; a8 i7 g+ ~3 M
2 q- |$ Q6 R" ]' f8 n
5 W4 T. {) o P% [+ X" {& J( Q# Z
% Q: I7 p G5 n) g. \ 我是老温,一名热爱学习的嵌入式工程师
( Q* s+ B8 b) J; j" s关注我,一起变得更加优秀! |