• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

嵌入式到底该怎么学

武飞扬头像
xiaohuobiancheng
帮助4

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。很多人都不知道嵌入式怎么学,这一期我就简单说一下我的理解。嵌入式这个概念太广了,可能很多人认为嵌入式就是嵌入式Linux。但是其实并不仅仅只有Linux,像STM32,51单片机也属于这个范畴之内的,它们有的也可以跑协议栈,跑ucos等系统。

学新通

嵌入式是有很多方向的,选择一个你觉得发展前景不错的方向,做好,做精了都会有前途。接下来,跟大家探讨一下嵌入式的一些方向,和如何去学习。我以前也是摸索着过来的,没人告诉我如何学习,也没有学习线路,所以走了很多弯路。

嵌入式方向

·单片机开发

单片机开发在这个市场上的需求还是很大,单片机公司业绩并没有下滑,单片机的领域在工业控制,机械控制等上面会比较多一些,当然也会涉及物联网。单片机有8位,16位,32位的,一般8位用得比较多的就是51单片机和STM8,32位用得比较多的就是STM32。一般学完51和STM32之后,找个单片机的工作应该是没什么问题了。单片机的门槛不算高,但是做好也不容易。

·Linux应用开发

很多人都不知道“Linux应用到底在做什么?”。其实应用就是在做功能,在操作系统中,因为分层的原因,把应用和驱动区分开,也是为了方便开发分工。因为单片机中基本都是驱动和功能混在一个程序中,所以转到Linux开发中,内容更加细,就整不会了。

Linux应用使用到的编程语言基本就是C和C 了。所以Linux应用开发一定要掌握好C语言,大学课本中的C语言只是入门,像多线程,多进程,网络通信,还有一些其他的库都没讲到。Linux应用在市场需求上还是很多的,基本有涉及Linux开发的,都需要,它的岗位需求会比驱动多。比如做网络设备,做路由,做POS机,做楼宇对讲等等。薪资上一般会比单片机高。

·Linux驱动开发

Linux驱动开发是难度最高的,因为它涉及的方面比较多。你必须要会看原理图,datasheet,要了解许多驱动框架,然后还要能写一些应用来调试驱动。驱动入门时间是比较长的,这一块的工作机会在芯片原厂比较多,虽然一些公司也会需要,但是大部分是移植调试,对接原厂工程师等工作。驱动工程师要求高,所以薪资还是很不错的。

单片机方向

(1) C语言

认真学习C语言。C语言在嵌入式中是重中之重,它就是你上手嵌入式的工具。大学考试不考的,在工作中却经常用到。函数指针,结构体,枚举,文件操作,共同体,宏等相关知识都是非常常用的。不仅是ANSI C,还有GUN C,所以学起来需要花些功夫。

(2) 51单片机

虽然现在51单片机用得越来越少,但在一些要求不高的项目中还是会用到。学习51是在打基础,对于后面学习其他芯片会有帮助。比如理解寄存器是什么,如何去看电路图,学习一些协议(I2C, SPI,串口等),学习看datasheet,这些对于后面的学习会有很大帮助。

(3) STM32

STM32属于ARM系列的芯片,STM32在这个市场上用得特别多的,有各种各样的系列(L0, F0, F1, F4等)。基本都大同小异,学习一种之后,其他的上手就很容易,官方基本都封装了库,我们只需要对结构体进行配置,然后调用接口函数就可以了。

它有着丰富的外设资源,运行速度也比51快很多。我们一般就是学习它的外设资源( SPI, I2C,定时器,看门狗等),在这个过程中还会接触很多传感器。学完这些,找个单片机的很容易。如果要深入STM32,还可以学习UCOS, FreeRTOS等实时操作系统,这些对你以后深入理解操作系统会有很大帮助。

Linux应用方向

(1) Linux基本命令

做Linux应用肯定要在Linux环境下开发啊,所以熟悉Linux的基本操作是应该的。装个Ubuntu系统,在上面练习shell命令,把基本的命令练熟练了。可以顺便把shell脚本学习一下,刚开始可以只练习命令即可。

基本shell命令: ls cd cp rm touch mkdir echo cat mv ln chmod man等。

(2) Linux C编程

上面提到的C语言主要是基本的语法,在Linux下我们要涉及的就更多了。包括文件IO,多进程控制,多进程通信,多线程编程,网络编程等。掌握这些就基本算入门了,后面要深入,可以去接触一些第三方库,比如ffmpeg,log4c, openssl等。这些一般跟你所处的行业有关,比如ffmpeg一般是音视频相关的。

(3) Qt编程

Qt就是图形化编程,它是一些基于C 写的图形化库。它是跨平台的,所以写完的代码,只要在不同的编译器下编译,就能在不同的平台下运行。因为它是C 写的,所以要进行Qt开发需要有C 的语言基础。Qt不仅在嵌入式用得很多,现在很多PC软件也使用Qt写的,比如VirtualBox。

Linux驱动方向

Linux驱动的学习一般是建立在前面的基础上的。当然,学驱动也不需要你应用写得很牛,但是基本的应用你要会写,这样才能方便你调试驱动。

(1)裸板程序

裸板程序其实跟单片机程序没什么区别,都是直接操作寄存器。那为什么要还要学这块内容呢,其实是为了后面打个基础,因为Linux驱动就是Linux驱动框架加上操作寄存器。而且这个阶段对我们查看电路图和datasheet也会有很大帮助。

(2) Uboot移植

Uboot其实是属于系统层的,但是目前行业中大家都是分为底层和应用层,所以这些系统层的一般也归为底层,所以驱动工程师一般也需要做这块。Uboot的主要目标是去引导内核,当然Uboot上也会有属于自己的驱动程序(这里的驱动和内核驱动是不一样的,是独立的)。学习的过程,除了照着别人的教程一步一步移植外,还可以自己找一个其他版本的Uboot,然后自己慢慢移植,会很有趣。

(3) Linux内核移植

内核移植和Uboot移植差不多,都是基于具体芯片架构做移植。现在的内核越来越完善,并且芯片原厂也一直在向内核提交自己的代码,所以慢慢的,非原厂工程师对这块的移植越来越少。但是还是希望学习的过程中能自己找一个版本来进行移植,边查资料边移植,会学到很多东西。建议有时间和精力的,可以深入学习Linux内核,会对写驱动与很大帮助。

(4)根文件系统制作

根文件系统比较简单,嵌入式根文件系统一般都是使用busybox,一般就是配置,编译,制作,打包。它也是属于系统的。

(5)字符设备驱动

字符设备是最基本的,像RTC,音频,LCD都是字符设备。可不是仅仅按键,LED,虽然我们学习时都喜欢从它们开始,那是因为它们简单,不会涉及很多设备本身的知识。这样我们在学时会更注重在驱动框架本身的学习。在学习字符设备驱动的过程中,除了基本的open、read、write、ioctl、close外,还要学习并发(原子量,自旋锁,互斥体等),阻塞和非阻塞I/O,异步通知和异步I/O等等,最后还有一个很重要的就是中断。这些东西随便拧一个出来,都能学很久。像并发,阻塞,异步I/O这些在其他的设备驱动中也一样会用到,所以在这个阶段一定要好好学的。

(6)驱动架构

可能很多人学完字符设备驱动后,会马上继续学块设备和网络设备驱动。但我觉得这个时候去学这些是比较容易受打击的。并且我认为应该先把一种摸透,然后再去理解更复杂的,这样会提升信心,对学习更有帮助。

这里说的驱动架构是"总线设备驱动"模型。一般掌握platform,spi,i2c等总线。platform是一种虚拟总线,一般控制器都是用这种总线,还有像LED,按键这种不是挂接在具体总线上的,也是用platform。这个模型的目的是为了将硬件部分分离,让驱动可以复用。

这过程中我们可以将上面的字符设备驱动改为使用"总线设备驱动"模型。到此,我们基本可以应付很多传感器驱动了。

(7)块设备驱动和网络设备驱动

块设备一般就是存储设备,比如磁盘,MMC,FLASH等。Linux定义了大量结构体和函数接口来让我们填充调用。网络设备也是一样,Linux封装了net_device结构体,然后让我们填充注册。大量的驱动都是这样,Linux系统屏蔽了很多细节,让我们专注于设备的控制和读写。比如RTC,LCD等,我们只需要去使用rtc_device结构体就可以去注册一个RTC设备。现在的网络设备一般拆分成MAC PHY的结构,就是主芯片有MAC控制器,然后外挂PHY芯片。像最早的DM9000是将MAC和PHY集中在一起。

(8)各驱动子系统

Linux内部有很多驱动子系统,比如前面说的RTC,Linux提供了RTC核心层,再比如LCD,提供了FrameBuffer等等。还有鼠标,键盘等输入(Input)子系统。每一种驱动都能啃很久,以后可能还会接触Wifi,蓝牙,USB等等。这些东西不单单需要驱动相关知识,还需要很多协议和接口相关的知识,它们的复杂之处就在于此。这些复杂的驱动等需要的时候,或者有时间的时候再慢慢深入研究。

(9)设备树

为什么将设备树放最后,因为你不用设备树也可以,但是自从设备树出现之后,基本上大家都在使用。所以它已经成为驱动工程师的必备技能了。Linux推出这个东西,肯定是经过深思熟虑的,我们要顺应潮流。

本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!嵌入式软件可以深入的东西还有很多,包括算法,数据结构,设计模式等等。不论是单片机还是Linux它们的更新是非常快的,我们也要经常去关注它们。不能原地踏步。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhcajb
系列文章
更多 icon
同类精品
更多 icon
继续加载