赞
踩
太久没有做过相关的开发和学习了,技术这东西,一段时间不用就容易忘记,再加上本来就不熟悉,忘得更快。大学时候在tb买了某原子的一块开发板,就开始的时候学习了一段时间,后面因为毕业工作等原因,就放那吃灰了。当然这些都是借口,工作虽然事儿多,但是也没到没有时间学习的地步。
从今天开始,我将围绕这块开发板,利用工作空闲时间对嵌入式Linux驱动和应用做一个系统的学习。
如果你也是一个初学者,对于嵌入式Linux的学习比较懵逼,而且,如果你是非科班出身,且对技术没有热爱的话,我还是持劝退态度。如果你还是想写代码,我的意见是去搞纯软件吧,比如前端、后端、Android等,这些东西只需要一台电脑,就可以轻松上手(注意,我这里只是说上手),但是嵌入式则不一样,入门都是不容易的,很容易把你劝退。
言归正传,什么是嵌入式呢?目前国际还没有一个通用的结论,我们国内给了嵌入式一个概念:
嵌入式开发,其实就是对嵌入式系统的开发。
详细的讲嵌入式系统是以是以应用为中心,以计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。
总结就两点:
①以应用为中心;
②软硬件可裁剪的专用系统。
这个概念,你可以这么理解:当前的电子产品,除了通用的PC和服务器,都属于嵌入式的范畴。所以,在未来的很长一段时间内,搞嵌入式你想失业都难。然而这也意味着嵌入式的学习是十分漫长的,入门门槛高,难度较大,但是一旦学会了,剩下的大多时候都是依葫芦画瓢。
嵌入式的学习,开发板必不可少,为什么呢?理由很简单啊,嵌入式是以应用为主,你需要在实际电路上反复验证和观察,有很多现象你是在电路仿真中是看不到的,更不可能可以光靠想象。选开发板要注意以下几点:
①资料是否丰富,有否有足够的案例供你参考学习?
②售后技术支持如何?有老师带路和没老师带路完全是两码事!
③板子本身资源是否丰富?
如果通过各种途径查询你想买的开发板以上三点都可以达到你的期望,那么不需要犹豫,直接买就是了。
现阶段学习他的路径应该可以按照下面顺序:
1. C/C++语言的学习
C是后面学习嵌入式的充分必要条件,他的学习就像学习数学的加减乘除一样,学习数学不会加减乘除,后面你是不可能学得懂。不需要学到很深,你买本书,只需要将除了指针外的其他内容熟练运用就可以了,至于指针,你需要看得懂,知道他的意思和常用使用方式就可以了,剩下的只需要在后续的学习和开发过程中不断完善和加深理解即可。
这里要强调的是,我们学习一门高级语言是为了使用它,它只是一个工具,对于某个知识难点,不要过分计较,因为你计较的东西,可能在你以后的开发中都不会用到。先继续学习,学习很多时候都是触类旁通的。
2. 8位MCU(单片机)学习
有很多人说不需要学习8位的单片机。而我要说的是,这个过程必不可少,如果你是非科班出身,后面想要更上一层楼,这些步骤一个都不可少。嵌入式的很多概念都是一通百通。学习了8位单片机,你将知道什么是GPIO(输入、输出)、中断、定时器、PWM、串口、IIC、SPI等常用外设接口和通讯协议。当然,你直接开始后面的学习也会学习到这些,但是,就像是学习乘除,你得先学习加减,学完加减时再去学习乘除法,你理解会更加深入。如果你直接学习乘除,也能学习到加减,但是你没有练习过加减,你不熟练加减,可能你学习乘除也不会那么容易。
8位的单片机这里推荐51的,tb一搜一大把,教程也俯拾皆是,你找一个你看得上觉得不错的,买一块学习就可以了。
3. 16位/32位MCU的学习
学习完8位单片机后,再来学习16位/32位的单片机,这个时候,你会发现很多概念你都清晰了,自然学习起来会更加得心应手。在16位/32位单片机,你将会学习到更多高级的东西,比如更加高级的外设接口SDIO(可用来驱动SD/TF卡、摄像头等)、USB、网口等;学习到操作系统FreeRTOS、UCOS、RTThread等;你可能还会遇到WiFi、蓝牙、ZigBee、lora、4G等无线通信方式和协议等。这些可能都是你在8位单片机里面少有的概念。
32位单片机我推荐某原子和某火的stm32,他们是最早做stm32的,就是靠着stm32一步一步走到今天。售后不错,资料也是十分丰富,教程做的也相当不错。
4. 嵌入式Linux的学习(包含驱动和应用开发)
这一块儿是我接下来要深入了解和学习内容。学习上面的内容都是为了这里做铺垫。嵌入式Linux的学习主要包含两个部分,一是嵌入式Linux驱动开发、二是嵌入器Linux应用开发。当然嵌入式不只有Linux,那为什么我们说起嵌入式,首先想到的就是Linux,甚至一说起它就把他和Linux对等起来?这其中一个很重要的原因就是Linux操作系统他是开源的,这么一个比肩windows的强大开源操作系统,你不用它用谁呢?
嵌入式Linux的开发板也是一样,某原子和某火都有相应的开发板,还有某东山。某东山在嵌入式Linux有很深的耕耘,相比较某原子和某火而言,可能某东山更有经验,但是价格也会相应的提高。看自己取舍了。
①嵌入式Linux驱动开发:
驱动开发就是我们常说的嵌入式底层开发,比如我们的芯片有USB、SDIO、GPIO、PWM、SPI、IIC等外设接口,我们就需要编写这些外设驱动代码,以便上层接口可以调用,比如我想在这个芯片上接个摄像头拍照获取图像,那怎么办?写代码控制?你知道怎么写代码去控制他吗?这么说可能比较抽象。拿电脑来说,你应该听过蓝牙驱动、显示屏驱动、显卡驱动这些概念,如果你想要使用蓝牙、显示屏、显卡,就必须先安装这些驱动才可以死正常使用。就这么理解就可以。咱们嵌入式Linux驱动开发,做的就是差不多这些工作。
②嵌入式Linux应用开发:
应用开发顾名思义就是用Linux做应用开发的,当一颗芯片的各种外设驱动搞定后,就可以在这颗芯片上做应用开发了。我们可能听过Qt(一个优秀的,跨平台的上位机编写工具),他就属于是应用层的开发。应用层只需要直接调用给的接口,便可让想要外设工作,比如我的芯片接了一颗摄像头,应用层只需要直接调用接口,便可直接获取到摄像头数据获取的图像数据。再比如我想联网获取网络数据,我可以直接用代码调用对应的网卡接口获取网络数据等。Linux应用主要学习的内容有:
A. 文件IO;
B. 多线程/多进程;
C. 网络编程等。
当然远不止这些,这里面还涉及很多问题,需要学习很多东西,但是这些大多数东西都是一样的,也就是说你熟练掌握后,后续在其他芯片或者平台上应用也是一样的。
除此之外,你还要会一点模电和数电的常识,能看明白原理图,学会使用万用表、示波器、函数信号发生器、逻辑分析仪等基本工具。任何一点都需要你做一些项目才能熟练掌握,记住,嵌入式是以应用为主,光看书和视频是不可能学会的,动手实践才是王道。
当然,上面我说的这些,你只需要熟练掌握任何一点,都能找到一份不错的工作。现在还有很多使用8位单片机做开发的,比如我们实习的家电行业;还有很多使用32位单片机的场合,比如功能稍微复杂一点的手表/手环等带显示屏的电子产品等。
嵌入式的学习还远远不止我上面说到的这些,在学习和开发过程中还会碰到很多的东西,很多的概念,很多你不熟悉的东西。不过不用怕,如果你热爱它,那就动手干吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。