Hello!大家好,这一期博主就给大家说一下零基础的宝宝们如何学习嵌入式开发~
“嵌入式开发”没有接触过的同学可能会不明觉厉,但是只要你了解了,感兴趣并且有一个正确的学习路线的话,零基础也能入门。所谓嵌入式就是以应用为中心,以计算机技术为基础,软硬件可裁剪的一个专用计算机系统。简单来说嵌入式开发就是在一些特定的硬件设备上跑软件程序,那智能手表、智能音箱这些我们生活中常见的一些产品都属于嵌入式开发的领域。但是这些产品在设计开发的时候都会受到一些限制,比如说处理器的选择、内存容量、电源的要求、功耗等等,所以嵌入式开发需要考虑很多细节和优化问题。
下面,博主就给你介绍一个简单易懂的学习路线,让你能够从零开始学习嵌入式开发。
第一步:掌握Linux基本操作
什么是Linux呢?而我们为什么要学Linux呢?Linux是一个操作系统,类似于平常使用的Windows系统,因为Linux是嵌入式开发最常用的操作系统,是作为一个开发人员必会的内容。它有很多优点,比如开源、稳定、高效、灵活等。如果你想成为嵌入式开发人员之一,你必须要熟悉Linux的基本操作,比如如何使用命令行、如何管理文件和目录、如何设置权限和用户、如何创建文件写代码等。这些操作并不难,只要你多练习,就可以很快掌握。你可以在自己的电脑上安装一个Linux系统,或者使用虚拟机或者远程服务器来练习。
第二步:学习C语言基础
之前有一个电视剧的爱心代码比较出圈,引起很多女生的羡慕,这个时候就体现出程序员的浪漫了,所以写代码看代码是必备技能啦。那为什么要学习C语言呢?可能会有人有疑问,包括学校相关专业基本大一都会学习C语言,因为C语言是计算机程序语言的基础,学号C语言对后面学其他的语言也都有帮助,像是Java、python、C++等都是由C语言扩充或者延伸而来的。C也可以用于开发比较底层的东西,比如驱动、通信协议之类,在Unix和Linux环境中也是不可或缺的。对于C语言的学习来说,数组、指针、函数、结构体等都属于比较核心的内容,这个阶段大家需要多写代码、锻炼初步的代码逻辑思维。也可以写一些小项目比如学生管理系统等,对自己这个阶段所学的内容进行检测。
第三步:了解数据结构
通过前面C语言的学习,这个阶段需要对代码进行进一步的提升,不能仅仅满足于能写代码实现功能,而是需要继续考虑数据怎样存储能更合理的利用空间,算法怎么写才能更高效的实现该功能。代码没有一个具体的答案,但是可以不断优化。那么数据结构就在其中起到不可或缺的作用。好的数据结构与算法能够提升运行效率,同样不好的数据结构与算法也会造成空间的浪费。对于嵌入式开发来说虽然不需要特别高深的算法处理大量的数据,但是掌握一些比较基础的数据结构还是非常有必要的。比如线性结构如链表、栈、队列、树、图等。可以通过这些逻辑结构来表达数据之间的关系,当然也可以通过顺序存储、链式存储等不同的存储方式来将该关系体现在计算机中。而且通过这门课的学习也能大大提高学生代码逻辑的能力。此外在一些笔试题、面试题中也会涉及到一些排序、查找算法,所以还需要掌握一些常用的排序方法,如:冒泡、选择、快速排序、插值排序等,查找算法如:二分法查找、分块查找、哈希查找等。
第四步:应用层编程
以上都是基础部分,从应用层开始才是核心部分的开始。应用层主要包括I/O进程、网络编程等内容。如果以后考虑从事嵌入式软件方面的工程师,那么这部分内容是必须要熟练掌握的。
linux中一切皆文件,大家要掌握对于文件的一些操作,比如文件IO、标准IO的函数调用、以及二者的特点等,以及对于静态库、动态库的创建、特点等。进程、线程这边重点掌握进程、线程的区别、特点;进程的创建过程;线程函数、进程函数的调用等。掌握线程如何实现互斥?线程如何实现同步?
进程间通信方式是哪7种?怎么使用的?它们各自特点及区别是什么?掌握好这些内容那IO进程就差不多啦。
网络编程这部分还是重点在网络上,网络协议要了解一些,服务器、客户端的创建(socket套接字通信)也是必须要会的内容,以及抓包工具、分析包、三次握手四次挥手、IO多路复用等等,这部分也是在面试、笔试中必问问题之一。当然这个阶段完成就可以做一些项目来检验自己啦,比如:ftp聊天室、电子词典等。
第五步:C++、QT
C++是C语言的继承, 它保留了C语言原有的所有优点 ,并增加了面向对象的机制。考虑到后续就业阶段C++也可以单独作为一个就业方向.比如游戏行业,几乎所有的3A游戏都是使用C++编写的,可见它的需求量之广。C++还是偏向理论一些,比如它的三大特性:封装、继承、多态,相对来说比较抽象,所以学完C++可以结合QT进行一些项目的编写,理论结合实践。有一些显示在终端的命令无法直接给普通用户使用,所以可以用QT将这些命令可视化,以界面的形式呈现出来更加直观,也对于C++所学的内容能进行应用。这部分也可以做一些项目,比如:网络调试助手、计算机、记事本、聊天室等。
第六步:学习STM32单片机
了解过的同学可能知道,单片机是一种集成了处理器、内存、输入输出接口等功能的微型电路板,它是嵌入式开发的基础硬件设备。学习单片机可以让你了解硬件的基本原理和操作方法,比如如何连接电源、如何配置引脚、如何编写驱动程序等。
目前应用最多的还是32单片机,大家可以在开发板上进行实验,可从GPIO点灯实验入手逐步递进掌握定时器、串口、ADC、DAC等,如先看板子白色丝印,再看原理图,如果有底板有核心板就先看底板原理图、再看核心板原理图,通过看网络编号等找到最终需要配置的引脚,可通过CubeMX等软件进行配置生成对应的KEIL工程,然后编写代码烧录即可。就业时可能会问是否会PCB,如果你能够自己设计PCB板,那就更完美了。这部分写代码就需要大家之前的C语言功底啦,所以前面的基础打好还是很有必要的。
第七步:底层开发
这部分内容普遍会觉得有点难,前面学的内容都是基于已经有板子、有操作系统的,那这部分回到操作系统层面上进行编程。
移植操作系统是嵌入式开发必须掌握的技能,需要了解U-BOOT、内核、根文件系统,以及它们的裁剪、编译、烧写过程。在这一块,驱动是比较复杂的部分,需要同时懂得底层硬件和内核。
这部分掌握好了就可以去嵌入式底层岗位方向比如:嵌入式硬件工程师、驱动开发工程师等岗位投简历啦!
结语
以上就是博主给你介绍的零基础学习嵌入式开发的七个步骤。当然,这只是一个大致的路线,并不涵盖所有的细节和知识点。如果你想深入学习,还需要仔细研究一些书籍和资料,也可以参考华清远见的课程以及多做一些实践项目~本期内容就到这,下期再会咯~