你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

收藏贴|如何学习嵌入式软件?

发布时间:2024-07-30

浏览次数:0

安卓版下载_sublime text 3安卓版_安卓版steam在哪下载

什么是嵌入式?

嵌入式有广义和狭义之分,广义的嵌入式是指片上系统,包括单片机、PSOC、NIOS等;狭义的嵌入式是指运行操作系统的具体芯片,如ARM9、A8等。这里主要介绍狭义嵌入式的学习路线。

还是主流方法,先学会使用,再深入底层。

常用的操作系统有Linux、WIN CE、、QNX、OSE等,目前资料最多的是Linux,所以下面就以Linux为例。

1.安装虚拟机及Linux系统

大多数人都会在电脑上安装操作系统,如果想在电脑上运行其他系统,就得安装虚拟机了。目前主流的虚拟机有、、、等,随便选一个安装即可。然后去官网下载个人版Linux镜像(.iso文件)在虚拟机里安装。下面是主流Linux系统的官方链接:、、、、、、suse。如果你没用过Linux,建议用它。因为它是收费的,而且改名为RHEL,所以这里就不介绍了。

首先下载一本书,叫《鸟哥的Linux私房菜》。然后进入第二、三、四阶段(学习初期不需要开发板)。

2. 学习使用常见的 Linux 命令

这里要改掉点鼠标的习惯,在Linux下做事都要用命令行。另外在Linux下下载软件的时候,不用百度下载,而是用Linux自带的包管理工具(如:apt-get、dnf、rpm等),如果用的话要修改软件源(下载软件的网站),因为国外的源比较慢,百度有详细的使用说明。接下来你要学会最基本的命令,如:ls、cd、find、grep、ps、diff、fdisk等,只要照着教材操作几遍,你就能学会,不需要很深的理论知识,不需要掌握所有的命令,也不需要记住所有的命令选项,有时间的话可以去社区或者Linux公社看看。

3. 学习使用常见的 Linux 工具

1.编辑器(写代码必备)。有gedit,vim,emacs等,建议学习vim。

2. gcc 和 gdb。gcc 是一个编译器,而 gdb 是一个代码调试器。

3.这个不像VC++6.0,点一下鼠标就能帮你编译,在Linux下,必须用make和make工具才能编译,make和make可以自动生成。

4. ssh、tftp。如果你的ARM开发板上有web服务器,可以使用这些工具来访问。其中,建议使用ssh工具或者。

5、Samba.如果你想要使用Linux来交换数据,也可以搭建Samba服务器。

6.版本控制器。有svn,cvs,Git等。建议学习git。有了git,就不用手动备份代码了。

4.学习编写shell脚本

在实际工作中,复杂的系统管理操作并不是通过一行一行的敲命令来完成的,而是使用脚本(命令是基础)来完成的。脚本也是一种编程语言,只不过是解释型语言,相对于C/C++、C#、Java等高级语言来说,脚本要容易学得多(因为加入了语法糖)。Linux下,shell有很多种,如:bsh、bash、csh、tcsh、ksh、zsh等,一般就学bash,其他的都是碰到再学也不迟,因为都差不多。另外bash的语法比较奇特,很多符号(如:$#、$0、$?等)比较难记,但也没必要刻意去死记硬背,只要记住,需要的时候再查手册就行了。这里的重点是掌握正则表达式,如果有时间的话sublime text 3安卓版,建议大家学一下脚本。 语法比 bash 简单很多,用途也更广泛。推荐“Shell Tips”。

5.学习Linux下的C编程

虽然学习bash能做很多事情,但是驱动和内核开发我还是使用C语言,因为那时系统还没起来,不能用bash,另外C语言执行效率比bash高,网络编程也经常用C语言开发。这里需要掌握基本的文件操作,进程/线程控制等。推荐的书籍有《Linux环境C编程》、《UNIX环境高级编程》、《UNIX网络编程卷一》、《UNIX网络编程卷二》,或许这些教材有点难,但是请不要墨守成规,暂时不懂的就跳过,等学完下一阶段的理论后再回过头来看,之前不懂的就变得容易了。

6.增强理论知识

因为有些人冒充嵌入式硬件工程师,但其实嵌入式硬件就是普通硬件工程师的工作,我们这里讨论的是软件,嵌入式又以软件为主(薪资不高,差距很大)。如果对硬件有兴趣,可以参考《如何学习硬件设计-理论》和《如何学习硬件设计-实践》这两篇博客,这里不要求你一定精通硬件,但有一定的了解就足够了。

1、单片机。具体学习路线可以参考博文《单片机怎么学》。如果不想学单片机,可以学计算机组成原理。

2.数据结构。主要掌握表和树,其中链表用于操作系统的调度算法。

3.操作系统。都很重要,必须深入学习,才能更全面地了解Linux。

4. 编译器原理。有时间的话,最好多看一看。没时间的话,也学一下。对提高编程水平很有帮助。

5. 数据库。除了基本的数据库理论之外,你还必须掌握或。

6. ARM架构。本章主要介绍ARM的架构和指令集,在移植uboot和驱动的时候会用到。如果不做这两项工作的话,可以不用学。

7.计算机网络基础。开发中用到的SSH、TFTP、HTTP等都会涉及到网络相关的知识。

8、接口应用。如:串口、IIC、SPI、1-wire、USB、HDMI、CAN、IIS、PCIE、蓝牙、陀螺仪等。

在学习完上面的理论之后,再回顾一下Linux下的C编程sublime text 3安卓版,你会收获更多。

先下载一本韦东山的《嵌入式Linux应用开发完全手册》,再买一块2440开发板(虽然已经停产了,但是这个芯片是资料最多的),然后进入第七、八、九、十阶段。第七、八、九阶段,用开发板自带的就可以了,暂时不用研究。

7.文件系统

在学习操作系统原理的时候,文件系统已经介绍过了,没必要深究文件系统的具体算法,只需要了解它的特性,学会如何使用就可以了。例如:NFS、FAT32、NTFS、ext4、ZFS等。

8. 内核修剪

一般初学者可以先掌握内核裁剪(具体工作就是填入几个选项​​),裁剪只是把内核不必要的功能去掉,以减少代码量,这里只需要熟悉内核所有的功能选项即可,如果裁剪后还是达不到要求,那就得去读内核源码,修改内核了,我推荐《Linux入门》和《Linux阅读内核源码》,推荐阅读。

9. 驱动程序开发

由于系统还没起来,驱动能用的API还不多(部分内核API,如:等),很多函数还是要自己写。其中,临界资源经常会被访问,所以必须掌握自旋锁,睡眠锁。另外,驱动出问题的话,整个系统就崩溃了,所以必须掌握各种调试驱动的方法,如:goto语句,日志系统,KDB等。接下来,必须熟悉字符设备和块设备的驱动。我推荐《小白的博客》和《Linux》(中文版不推荐)。

10.移植

单片机也有,在keil C.a51中主要是用来做一些初始化的工作。然后,同样的功能在ARM上也有,但是不是那么重要,所以放在最后。常用的就是vivi和uboot,一般学习uboot主要还是掌握uboot的启动流程和移植。经过前面的学习,uboot对你来说已经很轻松了,一般你只需要学会如何使用uboot或者使用移植好的uboot就可以了,没必要深入研究。建议看下uboot自带的帮助文档。阅读uboot源码,很推荐。

11.图形界面开发

常用的GUI图形库有:GTK++、QT、JAVA、等。如果有C++基础,建议学QT,如果不懂C++,建议学JAVA。GUI开发初期,不需要用开发板,2440跑QT就很合适。如果要跑JAVA或者,建议换个开发板,可以考虑开发板,另外也可以用自带的开发图形界面。推荐的书籍有《QT5编程入门》、《疯狂JAVA讲义》、《疯狂讲义》、《编程入门》。

因为系统是在Linux基础上封装了一层API,所以如果要开发驱动,必须掌握Linux(上面前十个阶段),如果只是开发 app,只需要使用或者配合模拟器(最好用手机),就可以了,不需要学习Linux,也不需要学习开发板。

在你做过几个GUI项目之后,学习UML和设计模式,这将大大提升你的代码架构能力。

12. Web 开发

有时候需要在ARM板上搭建一个网页服务器,这里就得学习HTML、CSS、XML、Ajax、PHP等。看似内容很多,其实不多,因为这些语言入门简单。用Adobe开发,入门之后直接用文本浏览器就可以了(还需要学习MVC模式)。另外还需要会用bash或者写GI程序C,这样才能在网页上调用底层C语言接口。推荐《疯狂HTML 5/CSS3/讲义》。

13. 其他

本文不涉及流程图绘制软件,文档生成工具等(这两个东西工作中经常用到)。

从上面可以看出,嵌入式软件涉及到很多计算机相关的知识,这对于电子专业的学生来说无疑是跨专业的难度,另外,就算掌握了上面提到的这些知识,也只不过是打开了一扇小窗户而已,还有很多东西它做不到,比如二维码识别,视频采集卡等等。

BTW,嵌入式工作也分为几个岗位,分别是系统工程师、驱动工程师、软件工程师(负责网页或者GUI的开发)、UI工程师(也可以叫美工)。

系统工程师:熟悉操作系统内核原理,熟悉内核源代码。主要职责是对系统打补丁或者增加新功能,比如热升级,提高系统的容错能力等。一般公司不做这种开发。

驱动工程师:熟悉各类外设的驱动开发,为内核、GUI提供接口。由于很多IC厂家都提供相关芯片的驱动,很多驱动工程师被裁员(需求减少)。

软件工程师:熟悉各种编程语言和GUI图形库、框架(光会查文档是不够的,需要对框架非常熟悉),由于项目需求经常变化,开发效率跟不上变化,所以对软件工程师的需求大大增加。

UI工程师:主要负责界面的美化,有美术功底的学生比较适合做此类工作。

1.

2.

如有侵权请联系删除!

13262879759

微信二维码