新人小白啥都没学,直接拿开发板学习就是劝退,只会打击你的学习兴趣,降低你的效率!按照下面的步骤学,会让你越学越爽
通读C语言目标:学会使用C语言集成开发环境(Integrated Development Environment,IDE)掌握C语言编程基本语法、了解数组和指针等相关知识,能理解多少是多少,不要慌!新手推荐跟着视频学,哔哩哔哩搜索选择点击量最高的课程!书籍推荐The_C_Programming_Language(中文版)作者:Bjarne Stroustrup,阅读时浅尝辄止,不要深究!
这个时候你已经对C语言有了初步的认识,此时开始学习数据结构,同样打开哔哩哔哩搜索点击量最高的数据结构和算法C语言版视频,如小甲鱼,浙江大学王卓,黑马程序员等。刚开始学习时你可能会觉得难的鸭批,不要慌,不要去深究,不要去扣细节,这时候抠细节你就输了!重点掌握数据结构是什么?有哪些数据结构?为什么要用这些数据结构?什么情况下用这些数据结构?不要深究其c语言实现代码细节!掌握数据结构基本概念即可。然后学习常规的算法,十大排序算法,掌握其概念即可,不要深究!
此时你已经知道数据结构是用来定义数据的存储方式的,其可以用C语言实现,也可以用其他语言实现,用户只需要使用c语言读取数据,配合算法处理数据,再存储数据,如此反复实现一系列复杂的功能!但你C语言之前浅学,不是很到位呀,此时再仔细阅读The_C_Programming_Language将书本习题读一读,不需要自己去思考写代码,直接看答案,抄过来运行,弄懂就行!
程序员Carl写的代码随想录YYDS!代码随想录,目前你的c语言已经小成,数据结构也小有了解,此时阅读代码随想录是比较适合的。值得注意的是,你的目标是嵌入式软件开发,不是互联网,所以暂时不用在算法上学的太多、太深!阅读到回溯即可,后面可不看。代码随想录里的代码不仅要看懂,最好自己手动敲一遍!
此时的你c语言神功小成,可以一边学习操作系统基础知识一边阅读c和指针中文版(相信你此时阅读c和指针还是会有疑惑看不懂的地方,不要深究,浅尝辄止!),重点放在学习操作系统,推荐小林编写的操作系统,再找个视频跟着听一听,重点掌握基本原理、框架知识
此时的你已经神功小成,至少吹牛皮不虚了!但也不能得意,路漫漫其修远兮,后面路还长着呢!花点时间学习编译套件gcc,跨平台编译套件cmake。推荐看我的写的0.0!码农科普君:工欲善其事必先利其器--CMake牛刀小试。最后再学习一下代码版本控制git。此外学一学如何在GitHub搜集资料,如何配置VPN访问外网!这些都是你帮助你学习的神器!
此时的你虽然神功处成,但离嵌入式软件开发还早着呢!为了帮你暂时省钱和提高学习效率,先不要买开发板。此外我相信你肯定大学时期是学过一点数电模电知识的!找一些stm32f1系列的仿真小项目,直接抄过来,东改改西改改,搞清楚什么是硬件原理图,什么是PCB,什么是布线,电子元器件叫啥名字,为什么这么连接,什么是上下拉电阻,为什么要上拉或者下拉!单片机最小系统板是啥!在学习的过程中,找一本stm32单片机仿真书籍,配合着学习。要是觉得时间太长也可以省略这个环节,直接进入10
M系列开发板和A系列开发板,有钱的话都买,没钱就先买stm32f1系列,建议买正点原子的,把上面的案例读一遍,运行跑一下感受感受!把bootload也好好看一下!
之前都是裸机编程,此时跑一下RTOS感受一下,有了之前学习Linux的前奏,我想你此时学习RTOS应该是降维学习!找个项目做一下,锻炼一下综合能力!
如何部署机器学习、深度学习模型,如何训练,如何预测,也搞一遍吧!不需要你实现这些模式,学会移植,怎么使用,掌握常用机器学习模型,神经网络模型即可!
此时的你只需要进入大公司历练,积累行业经验,同时不断加深上述知识点的理解!多读书多实践!嵌入式软件真TM不是人学的!
嵌入式从使用平台上分可以简单分为单片机方向和嵌入式Linux方向,这也是嵌入式之后从事岗位划分的一个分界线。
单片机开发其实就是C语言的开发,这也是我一直以来的观点,C语言是单片机开发的核心,在辅助其他基础知识就可以做到很好项目
对于这部分的学习,其实是很难单独割裂出来的,这部分一般都是在单片机教程的开始会花一两个课时进行介绍。
如开头所说,C语言是单片机开发的核心,上一步了解什么是单片机之后,原则上就可以开始学习单片机了,这里一般都是推荐51单片机,因为51单片机的硬件比较简单,功能也不是很复杂,而且对于IO的操作很多例程融入了汇编,这对于理解编码和硬件的动作实现是非常直观的,很适合初学者理解。
模数电这里其实只要大致理解单片机的基本构成就好,不用深研,知道基本的电气了解是什么意思即可。
而传感器其实就是单片机的四肢,光有C语言是不行的,再结合适当的传感器就可以做出可以使用的作品。
推荐视频是为了初学者可以更好入门,这里可以直接参考买的开发板配置视频就好,下边是我知道的还行的教程,当然在51这个级别基本不用看太多视频。
金沙滩的:手把手教你学51单片机 KST-51单片机开发板 学习板 视频教程_哔哩哔哩_bilibili★★★★
下边这个阶段就是进阶下一个水平,可以使用stm32单片机进行开发,做到可以基本熟悉使用库函数编程,有能力的同学应该开始探索操作系统编程知识,因为操作系统是嵌入式实际开发项目的利器,也是难点所在。
对于stm32的学习,得益于其在国内的深度耕耘,和很多厂商培训班的普及,所以其学习资源非常多,就业的岗位也非常多,所以是学习的重点。
比较简单粗暴的学习方法可以直接买其中一个厂商的开发板学习就行,但是从实际情况看,目前市面上开发板存在资料过多没有筛选,培训视频啰嗦,例程不符合开发流程,实践项目缺失等问题。
正点原子stm32资料集合:正点原子STM32开发板 - 正点原子资料下载中心 1.0.0 文档★★★★☆
安富莱论坛(虽然视频不多,但是是我认为最好的stm32文本资料):STM32F407 - 硬汉嵌入式论坛 - Powered by Discuz!★★★★★
而且细心的同学可能会发现,我说了C语言是嵌入式核心,但是前三步并没有特别给C语言的资料,这是因为前几步的资料里已经涵盖了很多C语言的学习,对于一般同学已经是比较难的了。
所以我把走向高级单片机工程师的部分独立了出来,这是单片机从业者走向高端的必经之路,也是走向高薪的关键。
对于这部分目前市面上也没有什么好的资料,原因就是我上边说的,大部分人可能都困在前三步了,很少有主动探索这部分的,当然如果这部分做好了,其实也就超脱出单片机开发了。
虽然嵌入式Linux的学习路线看起来比单片机复杂很多,但是才有类比学习的方法也是完全可以的。
对于嵌入式Linux而言,C语言任然是重中之重,下边就是我提供的一些学习概念和资源,有时间会不断的更新,所以请持续关注!
上文也说了,对于嵌入式Linux开发,C语言是核心,而对于软件研发,数据结构又是灵魂。至于C++对于嵌入式是属于进阶的角色,也是嵌入式开发后期进入高薪的一个敲门砖,但是并不是必须,所以有精力的同学可以看看。
嵌入式Linux的C语言学习是在掌握基础C语言的前提下,在继续深挖的学习。所以这种情况就需要多实践,尽可能在Linux系统上实操,并进行debug,因为C语言就是debug的艺术,这是必不可少的能力。
这里的进阶其实就是进入Linux实战阶段,也是之后工作的重点,所以这部分知识是杂糅在一起的,我虽然根据自己的理解把之分解为三部分,但其实这些很多是需要一起学习的,
对于这部分的方法,简单步骤就是熟练使用Linux - Linux系统编程开发 -驱动开发和Linux内核开发
我印象最深的一件事就是大三下我们才开嵌入式那门课,开课那天,我收到了美团的嵌入式实习面试邀请。(本专业是智能制造专业)
虽然arduino只是调用库,但是先会用各种库来制作东西也不是很简单的一件事情,你会在这个过程中逐渐了解到串口通信,PWM电机控制,定时器,软串口等等,连带着搞搞esp,云服务器什么的,第一个嵌入式方面的项目也就差不多做成了。
你会在这个项目里了解到做实物的基本过程,知道我们学习嵌入式是为了解决实际工程的问题,并且也对制作实物有了一些自己的想法。
在这之后,才能逐渐往底层深挖,去学习51和stm32的知识。一开始接触51的时候我也是看不懂的,定时器,计数器,外部中断,内部中断各种拗口的概念,但还是要先做下去,至少做两三个作业规模的小项目,也就差不多把51熬过来了
然后是stm32,可以先拿正点原子的精英板学,这个芯片是f103zet6,容量大,学习基本概念绝对是够用了。在学明白精英板之后,可以去运用rct6或者是c8t6做物流小车,平衡小车,蜂鸣器播放歌曲等等实物,吃透一个项目,stm32的裸机运用也就差不多了。
这个时候,已经可以去找实习了,你就去找硬件开发或者嵌入式的实习。会发现自己的基础知识一塌糊涂,甚至分不清数字量和模拟量(别问我怎么知道的)
这就是你需要去补足的基础知识,多刷leetcode(主要是数组链表位运算那块的知识),多刷面经,多复盘项目(拒绝一知半解),多学基础知识,边学习边找实习。
在上面的学习过程中,你一定也会接触其他的很多知识,比如C#,opencv,计算机图形学,制作网站,或是深度学习,目标检测,甚至是plc,设计机械结构。你可以去学,但要记得把握好主线知识,不要学的太杂,这些知识可能在你嵌入式知识水平达标之后,会成为你的优势发展方向。
如果你只想在嵌入式方向深挖下去,那就跳过上面这段,去学linux,linux可以下各种虚拟机学基本操作,(也可以下个ROS玩一玩)。之后再买linux板子去烧写系统。树莓派可以,但不能只用树莓派,也要用其他的,封装并没有那么好的linux板子去学习,去做项目。学完这些之后就可以分方向了。
第一个方向是嵌入式应用,可以学qt后去做上位机;第二个方向是嵌入式驱动,嵌入式linux驱动;第三个方向是搞算法,往深学去搞电机驱动,或者是把AI移植到嵌入式设备;第四个方向是fpga,这个我也没太接触过就不讲了;第五个方向是转硬件开发,去学数电模电画板子等等;第六个方向是转制造业上层,去做工业机器人,智能制造等等。
我目前已经准备走第六个方向了,之前学的过杂耽误了点提升时间(其实上面这些都是我的亲身经历啦),发现只有智能制造的方向才能把我自己学的东西都用上哈哈哈
既然想要学习嵌入式,那么就要自己下定决心去做才行,毕竟嵌入式也不是你随便一下就能学会的,如果你想要自学的话,也不是不可以,难度肯定会有,效果肯定也没有你参加嵌入式培训班好,那么今天就来介绍下嵌入式应该如何学习吧。
1.嵌入式linux系统是我们学嵌入式的操作平台,所以在学习的时候你需要先好好的熟悉这个系统,熟悉好了嵌入式linux操作系统你才可以进行下一步。
2.学习嵌入式,编程是基础,所以C语言必须精通才行,推荐想学的同学可以看一下嵌入式linuxC语言学习视频。学习嵌入式,不懂C语言,一切免谈。
4.熟悉嵌入式系统知。