这段时间学习的感受、想法与部分规划

首先明白一个学习的不变奥义:先观其广,再究其深;

这句话其实不难理解,我是这样想的:学习一个部分的知识,先要知道这部分的知识都有什么,然后再选择自己需要或者感兴趣的地方进行深入学习,因此,这样的学习是有目的的,这样才能够在短时间内快速掌握技能。

目前的我整理的嵌入式方向学习主要分为以下部分:

基础部分:英语、数学、电路、C语言等(需要积累,不可能一蹴而就)

进阶部分:单片机(STM32、GD32等等)及其外设资源,这部分学习的核心本质就是“做”,不管是做项目还是做教程,都要切身实地的去做,只有从实践中才能获得十足的进步。

接着,单片机学完后学习实时操作系统(FreeRTOS、uCOS等),这段时间接触下来,我感觉这部分的学习不仅需要了解一定的操作系统知识,还需要充分掌握例程,在开发板上的练习不容忽视,通过在开发板上的练习,有助于我们进一步掌握实时操作系统的本质。

高级部分:ARM+Linux

了解ARM架构、ARM指令集等,要达到:拿到一款芯片和DataSheet,脱离例程,从0开始驱动一些基本模块的能力。

Linux系统:精通常用命令,学会查看手册等

Makefile:会用Makefile就行了,工作中需要能看懂,不会让从0编写的。

驱动开发:ARM裸机驱动,自己编写启动代码、Makefile、硬件初始化等,学好掌握好LED、按键、中断、UART等特别常见的基础驱动。

Linux内核与驱动:u-boot的移植,linux内核的移植,根文件系统的制作(这三个了解会就行,后面有机会了在工作中根据工作需求再深入)、Linux系统下的基本驱动(跟着韦东山学习)。

u-boot的主要功能是启动内核,涉及的主要步骤:读取内核到内存、设置启动参数、启动内核。实际工作中基本不怎么修改。

Linux下的基本驱动:从简单的开始,先写一个LED的驱动,试试驱动的安装和卸载这些流程,然后写一写复杂点的串口的驱动,移植一些复杂点的,网卡驱动、LCD屏的驱动等。按照早期驱动模型到平台设备驱动到设备树的使用,先把简单的驱动过一下。(会字符设备驱动就已经具备工作的能力了)

在学习驱动的过程中,随着越来越多的接触内核,这时候免不了学点内核调试的技术了,例如中断子系统、内核休眠与内核定时器、异步通知、内核同步机制等。

上述进阶后的这个过程是一个边实践,边学习的过程,初期的目标就是心里有个框架,知道什么地方有什么,什么东西怎么使用,具体对于各部分学到什么程度看自己的实际需求和工作的要求。

Linux的应用:还是那句话,根据需求来学习,开始了解的话先掌握一些基本的应用开发编写能力:基本设备的访问(LCD、输入设备),进程、线程、进程通信、线程同步与互斥;休眠-唤醒、POLL机制、信号;网络编程等。

C++与QT:按需学习,有精力了先了解着学习。

嵌入式的学习内容很庞杂,学习的宗旨一定是先观其广,再究其深,这个深度一定是在实际工作中,根据具体的工作方向不断深入的。

刚才写的时候在想,对于上述的这些内容模块部分,究竟学到什么程度才能算可以了呢,现在写完后让我觉得,很多内容都是需要实践的,学到可以用的程度就算可以了,后面在一次次的使用中再逐渐的深入学习与了解,这才是适合我的学习方法。

还有就是:我想着是不是可以把每天学习的内容写成文档发到博客里,这样一方面是复习的时候好找,快速看一遍就能够回想起来,另一方面是发表到网上被网友们浏览评论啥的能够激发自己的创作兴趣,获得一个及时正反馈,让我每天都能够有动力去学习,不会轻易懈怠。

硬件设备方面,需要达到一个能看懂电路图,能用示波器和万用表排查问题的层次。还有就是学完这些后的上升途径,主要分为3个方向:

一个是懂业务协议,比如无线通信的WIFI、bt协议;再高端一点,就是dsp处理算法,这个学明白了,算是上了一个台阶,还有一个linux内核,也学明白的话就算目前来看的天花板了。

新理解的学习方法:把学习当作工作目的去对待,当你转变思想后,自然就会思考如何去实现,会去检索查资料,会去设计软件实现,也就自然去琢磨如何做才能够实现,更重要的一点,会在遇到问题时去从整体方面思考解决,这不仅是学习的思路,也是工作中去实现需求,解决问题的思路。

其实,上述的所说的学习方法的本质是“量化”,量化工作与学习的任务和目的,细分这个过程,一步步解决,等到全体的局部任务都完成了,整个目标自然也就差不多了,这也是贪心算法的本质。

再说明一下,这种思想听起来不难,很好理解,但是概括起来,关键点在“转变”二字上,那要转变的是什么呢?其实不难想到,就是将我们的学习思维转变为工程思维,这是核心,也是最重要的领悟点,甚至高于很多的知识技巧。

学习思维很常见,大致来说,就是按照别人推荐的路线,顺序去学习,或者按照网上课程的安排一节节的听过去,或许我们在学的时候很认真,记笔记、画导图啥的,可是到实际操练的时候,发现自己还是很难去上手,这是因为很多人意识不到这样子的学习学的是理论,和将来的实践操作关系不大,因此他们根本不知道自己提升慢的原因在哪。毋庸置疑的是,这样学习很扎实,但是相对来说,时间不等人啊,这么费时间又提升慢的学习,只适合在中小学的课堂上了。

那么,工程思维是什么呢?很简单,工程思维就是为了应用实践的思维方式,学习为应用服务,对于与当前要做的目标无关的技术与知识可以先跳过,这样学习的好处就是提升快,印象深,不容易忘记,而且只要不笨多练几次很容易掌握;但是同时我也在想,这样的学习是有一定门槛的,上手难度不低,在关键的时候很容易走歪路,需要老师傅指路,或者自己信息检索、整合的能力足够强,在一些关键时刻能够从网上找到别人的经验,从而避免了走歪路,这虽然好处巨大,但无疑很耗费精力,一般人坚持不下来。最后,通过一次次实践积累的经验,结合在过程中阅读学习整理的资料,进而完成实际技术和经验的同步提高。

总之,我们要想快速提高,一定谨记自己是“为了实践而学习,不是为了学习而实践”,了解认识了这种思想,再加以一定程度的刻意训练,基本上可以快速提高自己对一件任务的快速上手了。

看到一位博主分享提问:是什么技术或者说思路支撑着将项目从整体细分成具体的功能项去实现的,这种的经验是否能够积累并总结下来,在遇到其它类型的项目中继续使用呢?

其实这个问题不难,我们需要理解开发过程的本质,很多的技术都是建立在需求上的,对于嵌入式的开发流程来说,从逻辑上大体可以分为3个部分:

【1】数据的输入(传感器、信号、接口输入等)

【2】数据的处理(协议的解码和封包、AD采样值的转换等)

【3】数据的输出(GUI的显示、网络的转发、输出的引脚状态、DA的输出控制电压、PWM波的占空比等)

事实上,这三句话推广开来覆盖了绝大部分软件应用的实现流程,理清楚这个脉络,就会发现技术都是根据数据处理的需求去运用的,进而反过来学习技术,把握着数据的处理脉络去掌握也是比较好的方式。

现实我们所面对的情况当然是更复杂的,但无论多么复杂,嵌套多少技术,底层的逻辑背后还是数据的流动,根据这套逻辑,是可以把项目的功能和需求转换为硬件的设计、软件的架构等,进而整个项目的开发也就有了具体的方向了。

因此,在我们学习的时候,先定需求,根据需求反过来学习模块、学习技术,这一步虽然对入门者来说门槛比较高,但只要花时间迈过去了,后面其实也大差不差,而且更重要的一点是,不管什么项目,很大一部分在网上都有人去做过的,我们要做的就是把自己需要的部分能找到提炼出来为自己所用,然后就是一片坦途了。

最后,在学习的过程中,多做总结,早点定位自己的行业,这一点是非常重要的,早点找到自己的发展方向,有自己的职业规划,后面才可能有一个长足的发展。

以上观点部分来源于知乎等网站的相关博主,感谢他们分享的学习思路和方法,让我醍醐灌顶,因此决定整理出来发表,以供后续的回顾,常看常新~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loxpks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值