嵌入式Linux与物联网软件开发:ARM处理器开发自学教程

978-7-115-61708-8
作者: 朱有鹏韩霆
译者:
编辑: 张天怡

图书目录:

详情

本书基于ARM Cortex-A8 内核的三星 S5PV210 CPU,主要讲解 ARM CPU 开发的全套相关技术,包括ARM体系的背景知识、常规开发方式、ARM 体系结构和汇编指令集。本书还基于 X210 开发板讲解了开发板的原理图、芯片的数据手册,以及开发板的刷机流程等,讲解了 GPIO、LED、DDR、串口、定时器、看门狗、SD 卡、NAND Flash、iNAND、I2C 总线、LCD 屏、A/D 转换器、电阻式和电容式触摸屏等 ARM CPU 常见外设的原 理,并使用汇编和 C 语言编程进行了外设及代码重定位、时钟体系等的原理和功能的编程实践。本书最后还利用X210 平台结合部分外设写了一个裸机串口的 Shell 作为小项目,帮助读者理解什么是交互式 Shell,为下一阶段U-Boot 及 Linux 内核的学习打好基础。在具体讲解过程中,本书引用了产品的一部分原始英文图表,并有针对性地进行了适当的说明。 本书适合从事 CPU 开发等相关工作的人员和相关专业的学生阅读参考。

图书摘要

版权信息

书名:嵌入式Linux与物联网软件开发ARM处理器开发自学教程

ISBN:978-7-115-61708-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    朱有鹏 韩 霆

责任编辑 张天怡

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

本书基于ARM Cortex-A8内核的三星S5PV210 CPU,主要讲解ARM CPU 开发的全套相关技术,包括ARM体系的背景知识、常规开发方式、ARM体系结构和汇编指令集。本书还基于X210开发板讲解了开发板的原理图、芯片的数据手册,以及开发板的刷机流程等,讲解了GPIO、LED、DDR、串口、定时器、看门狗、SD 卡、NAND Flash、iNAND、I2C总线、LCD 屏、A/D转换器、电阻式和电容式触摸屏等ARM CPU常见外设的原理,并使用汇编和C语言编程进行了外设及代码重定位、时钟体系等的原理和功能的编程实践。本书最后还利用X210平台结合部分外设写了一个裸机串口的Shell作为小项目,帮助读者理解什么是交互式Shell,为下一阶段U-Boot及Linux内核的学习打好基础。在具体讲解过程中,本书引用了产品的一部分原始英文图表,并有针对性地进行了适当的说明。

本书适合从事CPU开发等相关工作的人员和相关专业的学生阅读参考。

前  言

ARM处理器(此处指CPU)是应用极广泛的处理器之一,主流的嵌入式产品,如手机、网络摄像机、无人机控制器、智能手表等几乎都使用ARM处理器。因此,对于有志于从事嵌入式软硬件开发的新手工程师或理工科专业的大学生而言,深度掌握ARM处理器的编程原理和技术非常重要。

我于2010年左右开始接触ARM处理器开发,先后使用过ARM7系列、ARM9系列、ARM11系列、Cortex-A8、Cortex-M3、Cortex-A53等多种ARM处理器,在仪器仪表、工控采集设备、网络摄像机等产品的研发过程中对ARM处理器理解得越来越深;后转入嵌入式教育领域,在向学生教授ARM处理器编程的过程中了解了初学者容易走入的误区和遇到的问题。这些经历促使我萌生了录制一套全面、系统、优质的ARM处理器视频课程的想法,并于2015—2016年录制完成,即“朱有鹏老师嵌入式Linux核心课程”。全套视频课程总计约400h,分为7个部分。其中第1部分主要讲解ARM处理器编程,该部分视频课程时长总计约100h。后应人民邮电出版社邀请将本套视频课程的优质部分进行整理出版,于是便有了本书。

本书最大的特点也是配套视频“朱有鹏老师嵌入式Linux核心课程”最大的特点,就是全面、系统,具有可学习性。

所谓全面,指的是本书几乎涵盖了ARM处理器的所有内核知识及周边知识。尤其是一些在很多图书中未提及的周边知识,正是这些看似并不直接属于ARM处理器的知识成为大多数初学者的学习障碍,增加了学习难度。如ARM处理器的串口通信,我在本书中不只讲了ARM处理器本身的串口通信寄存器和编程实战内容,还讲了串口通信的波特率、起始位、停止位、校验等概念,以及通信的同步和异步、通信的二进制物理层理解、时序图的解读等,这些拓展的周边知识使本书能够真正教会学习者使用ARM处理器。

所谓系统,指的是本书中知识点的前后顺序、轻重规划具有系统性。学习ARM处理器很大的一个难点就是其知识点多、复杂性高,因此很多人学习时感觉无从下手,很难把握,或总是有一种似懂非懂的感觉。因为很多人的学习是碎片化的,没有将知识点串联起来形成自己的知识体系,所以“只见树木不见森林”。要解决这个问题,就需要有人站在更高的高度,用系统化的学习材料将纷繁的知识点和技能点连接起来,帮助学习者构建自己的知识体系。本书,正是为此而生。

所谓可学习性,是我在录制“朱有鹏老师嵌入式Linux核心课程”时提出的一个概念。可学习性是指课程“容易下口”,能够被学习者更好地接受,能够让他们更舒适地学下去,从而学完、学会这些知识。为什么一套视频教程或者一本书需要具备可学习性?因为传统的视频教程或图书有“劝退率”过高的问题。这类视频教程或图书的作者在讲解时追求知识点本身的铺排、语言表达的凝练、章节组织的完美、篇幅的合理等,然而没有考虑到学习者本身并不一定是“完美的学习者”。尤其是在图书本身内容丰富又厚实,技术性很强而没有趣味性和娱乐性,又不是课堂教材,没有强制性的学习和考试要求等情况下,坚持读完书、学下去成了“学会”的最大障碍,这就是典型的没有可学习性。

以ARM处理器技术为代表的嵌入式技术,是一种内容丰富、技术知识点多、学习周期长、学习难度大的综合性的且具有深度的IT技术。本书便是为立志攀爬这样一座高山的“萌新学员”准备的“工具包”和“指导图”,预祝大家攀上高峰、成就自我!

本书qq群:366822311,欢迎各位读者入群交流!

朱有鹏

2023年4月

资源与支持

资源获取

本书提供如下资源:

本书思维导图

异步社区7天VIP会员

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com/),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

第1章 ARM那些你需要知道的事

嵌入式系统开发领域是当今最热门、最具有发展前景的IT应用领域之一。随着各行业的需求越来越旺盛,我们之前使用的8位(bit)处理器已无法适应愈加复杂的应用程序。

ARM处理器凭借其强大的处理能力、极低的功耗,迅速占领了处理器市场,在行业中占有举足轻重的地位。

本章将主要介绍ARM公司的发展历程和其经历的关键事件。了解这段历史,可以为我们之后学习ARM处理器开发做一个很好的铺垫。

1.1 ARM公司大事记

1978年,艾康电脑公司在英国剑桥大学诞生,它是ARM公司的前身。

1980年末,苹果公司开始与艾康电脑公司合作开发新版ARM处理器核心。此时,ARM处理器芯片尚未涉足嵌入式开发领域,主要应用在计算机上。

1985年,全球第一款商用精简指令集计算机(Reduced Instruction Set Computer,RISC)处理器问世,即ARM1。这时ARM1主要用作个人计算机(Personal Computer,PC)的处理器。

1990年,艾康电脑公司遭遇财务危机,在接受苹果公司和VLSI公司的投资后,分割出独立子公司Advanced RISC Machines,即ARM公司。

1991年,ARM公司推出第一款嵌入式RISC核心,即ARM6内核。

1992年,ARM公司为GEC Plessey和Sharp(夏普)公司授予ARM处理器技术许可证。

1993年,ARM公司发布ARM7内核,这是我们能看到的最早的ARM处理器内核版本。

1998年,ARM公司发布ARM9TDMI内核,三星2440使用的就是ARM9TDMI内核。

1999年,ARM公司发布ARM9E内核。

2001年,ARM公司发布ARMv6架构。

2002年,ARM公司发布ARM11微架构。

2004年,ARM公司发布ARMv7架构的Cortex系列处理器,同时推出Cortex-M3内核。

2005年,ARM公司发布Cortex-A8内核。

2007年,ARM公司发布Cortex-M1内核和Cortex-A9内核。

2009年,ARM公司发布Cortex-A5内核和Cortex-M0内核。

2011年,ARM公司授权深圳市米尔科技有限公司为中国区全线工具产品代理商。

2012年,处理器进入64位时代。ARM公司和TSMC(台积电)公司合作开发鳍式场效应晶体管(Fin Field-Effect Transistor,FinFET)器件工艺技术,并将应用于下一代64位ARM处理器。

ARM公司刚创立时,复杂指令集计算机(Complex Instruction Set Computer,CISC)是当时主流的中央处理器(Central Processing Unit,CPU)设计方案。由于当时ARM公司还很小,没有足够的资金使用CISC方案开发处理器,所以ARM公司选择了成本较低的RISC方案开发处理器。当时的无奈之举居然顺应了时代发展潮流,ARM公司借此机会迅速发展起来,对英特尔等公司造成了巨大的影响。

1.2 ARM公司的商业模式和生态系统

ARM公司的发展壮大和其商业模式、生态系统有很大的关系。

在ARM公司成立之前,半导体生产厂商已经有了如英特尔、美国超威半导体(AMD)、摩托罗拉等“巨头”公司。

英特尔公司是美国一家以研制CPU为主的公司,也是全球最大的PC零件和CPU制造商之一。

美国AMD公司专门为计算机、通信和消费电子行业设计与制造各种创新的微处理器,以及提供闪存和低功率处理器解决方案。

摩托罗拉公司是全球芯片制造、电子通信行业的领导者之一。

这些公司都是采用自己设计芯片、自产自销芯片的商业模式。

ARM公司的商业模式是,自己设计芯片,但是自己不生产芯片,而是把专利授权给其他半导体生产厂商,让这些厂商来生产芯片。ARM公司通过收取技术授权费和版税提成来获利。由于ARM公司不生产芯片,节约了生产成本,同时不存在与半导体生产厂商的竞争关系,并且半导体生产厂商得到授权后省去了设计芯片的成本,所以ARM公司与合作伙伴之间相互促进,推动了ARM处理器的发展。从商业模式上来讲,ARM公司其实并不是一家真正的半导体生产厂商,而是一家芯片设计厂商。

ARM公司在全球拥有超过1000家的授权合作伙伴,例如苹果、三星、高通、华为、展讯、全志科技等公司。ARM公司凭借自己高性能、低功耗的芯片设计方案,独特的商业模式和优质的合作伙伴,使自己设计的芯片在嵌入式领域占有非常大的市场份额。每年ARM公司授权的芯片出货量达几百亿片。

由ARM公司的商业模式可以看出,ARM公司自己不生产芯片,只设计芯片,这点成全了那些有需求的公司,同时ARM公司也得到了发展的机会,双方形成了互利共赢的商业模式,这就是ARM公司的成功之处。

如今社会分工不断细化,在某个行业的分工不断细化的时候,就会出现很多机会。我们要努力积累,仔细斟酌,才能抓住这些机会。

1.3 ARM处理器版本命名解析

ARM处理器有众多的版本,初学者刚接触这些版本的时候会很容易混淆,并且会在各个处理器的发布时间和应用方面有很多疑惑,接下来我们进行逐一解释。

1.3.1 如何描述ARM处理器的版本号

ARM处理器的众多版本号按照其定义的含义可以分成以下3类。

第1类:ARM公司根据处理器的系统架构来定义处理器,即处理器的内核是按照这个架构来设计和运行的。其命名规则为“ARM+v+数字”,如ARMv7是ARM公司发布的ARMv7架构。系统架构可以被ARM公司授权给半导体生产厂商来设计处理器。

从ARM公司成立之初发布的ARMv1到ARMv8,这种版本号都是ARM公司自己定义的。

第2类:ARM公司根据处理器的内核版本来定义处理器,即处理器的内部电路是按照ARM的系统架构来设计的,最终的处理器实物是依据这个内核来生产的。这个内核是ARM公司授权给半导体厂商的知识产权(Intellectual Property,IP)核(也称IP内核),半导体厂商通过“裁剪”内核可以生产出自己的处理器实物。内核版本有以下2种命名规则。

第1种命名规则为“ARM+数字”,是ARM公司成立之初就沿用至今的内核命名规则,它一直按照数字顺序沿用到ARM11,如ARM7即ARM公司发布的ARM7内核。ARM7内核是依据ARMv4架构来设计的。

第2种命名规则为“Cortex+字母+数字”,这种命名规则是为了应对处理器在功能、种类上繁多的衍生发展。它结束了“ARM+数字”的内核命名规则,按照处理器的功能和应用方向分出了3个系列的处理器,即“Cortex-A+数字”“Cortex-R+数字”“Cortex-M+数字”。这3个系列的处理器都有各自的细化命名规则,如Cortex-A8、Cortex-A9等都属于“Cortex-A+数字”系列,Cortex-M3、Cortex-M4等都属于“Cortex-M+数字”系列。这种版本号是ARM公司自己定义的。

第3类:半导体生产厂商根据处理器型号来定义,即处理器的不同型号。它没有统一的命名规则,是生产厂商按照自己的规则来定义的。这个处理器是按照ARM公司授权的IP内核来生产的。我们选择使用的S5PV210是三星公司购买了ARM公司的Cortex-A8内核之后,基于Cortex-A8内核进行修改再生产出来的处理器。

1.3.2 ARM处理器版本的发展历程

ARM处理器发展过程中出现的各型号如表1-1所示。

表1-1

处理器架构

内核版本

处理器型号(厂家)

ARMv1

ARM1

ARMv2

ARMv3

ARM6

ARMv4

ARM7

S3C44B0(三星)

ARMv4

ARM9

S3C2440(三星)

ARMv5

ARM9+xScale

ARMv6

ARM11

S3C6410(三星)

ARMv7

Cortex-M

STM32F103、STM32F407(ST)

Cortex-A

S5PV210、Exynos4412(三星)

Cortex-R

A10、A20、A31(全志)

Exynos5250、Exynos5450(三星)

ARMv8

Cortex-A53

骁龙815(高通)

ARMv1架构的处理器原型机是ARM1,并且没有经过商用。ARMv2架构是ARMv1架构的升级版。ARMv3架构的内核版本是ARM6,这是ARM公司的第一款微处理器。基于ARM7、ARM9、ARM11内核生产出来的三星S3C44B0、S3C2440、S3C6410处理器有很广泛的应用。

ARMv7架构和之后的版本架构的内核版本改为以Cortex命名,并且分为M、A、R这3类,以便在各个领域中都能发挥更好的功效。

Cortex-M(又称M系列处理器,M即Microcontroller)。M系列处理器的定位是32位单片机系列处理器,其依次推出了M3、M0、M4、M7版本的处理器,这些处理器在功能和功耗上各有优势,在嵌入式的各个领域都有非常广泛的应用,尤其是在对低功耗要求很高的物联网领域。典型处理器有M3系列中的STM32F103和M4系列中的STM32F407。

Cortex-A(又称A系列处理器,A即Application)。A系列处理器的定位是高性能处理器,该处理器可以为需要运行复杂操作系统和复杂应用程序的设备提供全方位的解决方案。从手机、平板计算机等移动设备到数字电视、机顶盒等家用电器,再到工业产品中的控制核心,都离不开A系列处理器。A系列处理器先后推出了Cortex-A8、Cortex-A9、Cortex-A7、Cortex-A15等版本的内核,它们在性能和功耗上各有优势。具有Cortex-A8内核的S5PV210就是一种典型的处理器,苹果手机和平板计算机中的处理器很多都是基于Cortex-A系列的ARM架构生产的。

Cortex-R(又称R系列处理器,R即Real-time)。R系列处理器的定位是高响应速度、高可靠性、低容错率。R系列处理器一般用于需要实时控制、高可靠性、易于维护的系统上。

1.4 CPU和SoC的区别及外围设备的概念

1.4.1 CPU和SoC的区别

CPU是计算机的运算和控制核心。CPU包括两部分,一部分是运算器,另一部分是控制器。

单片系统(System on Chip,SoC)是用于完成一个具体的功能的集合。把系统的功能集成在一个芯片上就是SoC,其中包含CPU、存储器、各种外围设备(又称外部设备,简称外设)等。

下面通过图1-1、图1-2来直观地了解CPU与SoC的区别。

图1-1

图1-2

早期的系统如图1-1所示,底板由一块印制电路板(Printed Circuit Board,PCB)组成,这个系统全部的功能都集中在一块PCB上实现。在芯片刚研制出来的时候,由于当时半导体工艺的限制,其集成度是非常低的,内存和外围设备等都没有集成到芯片内部,想要组成一个系统,就需要将CPU、内存、通信接口等通过PCB走线在PCB上实现,所以这种系统看起来会很庞大。我们见到的老式电子设备上面就有非常多的这样的芯片,这其实就是在PCB上实现的。

SoC如图1-2所示,底板由一个芯片组成,这个系统是在一个芯片上实现的。随着半导体工艺的不断进步,我们可以把之前放在PCB上的许多芯片都集成在一个芯片里,然后形成能实现具体功能的SoC。

以上就是CPU与SoC最本质的差别。随着时代的发展,现在市场上已经几乎没有纯粹的CPU了,大多都是SoC。

1.4.2 外围设备

外围设备简称外设,一般是指连在CPU以外的硬件设备。这是在CPU发展过程中遗留下来的概念。芯片处于CPU阶段的时候,系统需要外接各种设备(如串行端口,简称串口)才能实现功能,所以这些CPU之外的设备统称为外设。虽然现在芯片的发展处于SoC阶段,大部分实现系统功能的设备都集成到了芯片内部,但是这个概念延续了下来,所以我们一般把集成到芯片内部的设备称为“内部外设”。现在仍有在外部的外设,例如网卡、音频编解码器等,我们一般把它们称为“外部外设”。目前芯片的发展方向之一就是将所有外设集成到内部。

学习裸机开发就是学习SoC的内核(CPU,表现为汇编指令集)和各种外设的应用,我们会在下文为大家详细介绍各种外设。

1.5 学习平台的选择

1.5.1 学习平台的选择要求

对于学习平台,我们从以下几点进行选择。

资料多、容易找:大量的资料可让我们的学习更加具有系统性。

应用多、有市场需求和“底蕴”:我们选择的芯片一定要是在市场上比较流行、受到市场肯定的。

底层代码无过度封装:底层封装完善的芯片能降低我们使用芯片开发产品的难度,缩短开发周期,但是不适合个人学习,而只适合公司进行开发。因为底层代码都已经封装好了,不利于个人从底层一步一步学习。

难度适中:我们应选择现阶段市场上开发难度中等的芯片来学习,且芯片不能太先进,也不能太落后。

1.5.2 为什么选择三星S5PV210

三星处理器的相关资料相对于飞思卡尔、TI(德州仪器)、NXP(恩智浦半导体)、高通等厂商的来说更多一些,方便我们学习,所以这里选用三星的处理器。三星的S3C44B0、S3C2440、S3C6410、S3PV210是应用广泛的处理器,而Exynos4412处理器是Cortex-A9的四核处理器。三星的S3C44B0和S3C2440现在已经停产,不利于我们的学习。S3C6410的性能介于S3C2440和S5PV210之间,是个过渡产品,性能不及S5PV210,价格却比S5PV210高。Exynos4412性能比S5PV210好,但是相对来说学习起来比较困难。综合来看,如果学会了S5PV210,向下我们能更加容易地熟悉S3C6410和S3C2440等处理器,向上能看得懂Exynos4412等更高端的处理器。所以我们在三星的众多处理器中选择S5PV210来学习。

1.6 X210开发板介绍

接下来我们学习的裸机开发、U-Boot移植、内核移植等都是基于X210开发板来进行的。

我们选用的开发设备及环境等概括如下。

开发板:九鼎科技X210V3A。

SoC:三星S5PV210。

裸机实验方法:USB(通用串行总线)启动下载+SD卡(安全数字存储卡)启动。

BootLoader(引导加载程序)支持:U-Boot、Xboot。

操作系统支持:Linux 2.6.35、Linux 3.0.8、Android 2.3、Android 4.0.4等。

X210V3A开发板由核心板、底板和液晶板3个模块组成。

核心板采用8层板工艺设计,适用于工控、电力、通信、医疗、媒体、安防、车载、金融、手持设备、游戏机、显示控制、教学仪器等多个领域。它拥有180个引脚(pin),底板留有丰富的外设接口,可扩展性强。现在许多公司都选择这款核心板作为其产品的控制平台。

同时,开发板硬件电路支持软件开关机、休眠唤醒等,完全可以作为产品来开发使用。液晶板默认采用7英寸(in,1in=2.54cm)薄膜晶体管(Thin Film Transistor,TFT)液晶屏,同时可选配4.3in、5in液晶屏,支持背光亮度调节。

购买此款开发板的读者,可以参考开发板附带的光盘资料,其中有详细的说明文件和学习资料,本书也会参考深圳市九鼎创展科技有限公司(简称九鼎创展)提供的资料。涉及的知识点,本书会详细为大家讲解。

1.7 基于单片机的嵌入式系统和基于复杂操作系统的嵌入式系统的区别

嵌入式系统定义为以应用为中心,以计算机技术为基础,软硬件可裁剪,以满足用户对功能、可靠性、成本、体积、功耗等的严格要求的专用计算机系统。我们现在只讲基于单片机的嵌入式系统(简称单片机)和基于复杂操作系统(如Linux操作系统、Android操作系统,分别简称Linux系统、Android系统)的嵌入式系统的区别。

1.7.1 芯片平台对比

主流的单片机平台有51单片机、PIC、STM32、AVR、MSP430等。现在很多公司仍使用单片机来开发产品。科技发展得越来越迅速,基于复杂操作系统的嵌入式系统的应用随之越来越强大、使用得越来越广泛,如今主流的平台有ARM、PPC、MIPS等。

1.7.2 片上资源、价格、应用领域上的对比

单片机的片上资源有限,价格低,主要应用在小家电、终端设备、需要实时控制的系统等上面。从性能和价格来看,单片机的应用非常广泛。基于复杂操作系统的嵌入式系统使用的芯片的片上资源丰富、价格较高、应用领域广,如智能手机、平板计算机、游戏机、路由器、摄像机、智能电视机、广告机、智能手表、收银机等,这些应用领域一般都需要比较复杂的系统。

1.7.3 开发模式对比

单片机开发多使用裸机,程序规模小,常由单个软件工程师独立开发。有些复杂产品也会使用STM32之类的高性能单片机,并使用实时操作系统(µC/OS、FreeRTOS等)。然而基于复杂操作系统的嵌入式系统几乎全部基于复杂操作系统来开发,目前使用最多的是Linux系统和Android系统。

1.7.4 技术特征对比

编程语言方面,单片机主要使用C语言(少量用汇编语言),但是它和标准的C语言略有不同。例如51单片机在开发中很少使用结构体、函数指针等,而STM32单片机会使用一些结构体和函数指针。而基于复杂操作系统的嵌入式系统开发较复杂,一般分为底层开发和应用层开发。底层使用C语言,应用层使用C、C++、Java等语言。基于复杂操作系统的嵌入式系统所使用的C语言对结构体、数据结构、算法、函数指针等高级特性使用得比较多。

软硬件组件方面,单片机多涉及一些简单外设,如串口、I2C(Inter-Integrated Circuit,也写作I2C)总线、模数转换器(Analog to Digital Converter,ADC)、液晶显示(Liquid Crystal Display,LCD)屏等;而基于复杂操作系统的嵌入式系统则涉及更多复杂的外设,如网络(有线网卡、Wi-Fi、蓝牙等)、USB接口的外设、音视频编解码器等。

1.7.5 职业发展对比

单片机的学习周期和基于复杂操作系统的嵌入式系统的学习周期不一样。单片机学习路线短,职业发展平缓,薪资很容易达到瓶颈。基于复杂操作系统的嵌入式系统学习路线长,职业生涯久,薪资需多年才会达到瓶颈。

1.8 嵌入式开发学习和编程语言、英语水平等的关系

1.8.1 嵌入式开发学习和编程语言的关系

嵌入式开发一般分为硬件开发和软件开发。硬件开发不需要精通编程语言,而软件开发必须精通编程语言。嵌入式软件开发的学习过程分为3个部分,分别是底层开发、中间层开发、应用层开发。底层开发以C语言为主,会少量使用汇编语言来辅助开发;中间层开发使用C++比较多;而应用层开发使用的语言比较多,如C++、Java、Python、Tcl/Tk、Perl等。嵌入式开发和C语言的关系是最为紧密的,一定要学好C语言。

1.8.2 嵌入式开发学习和英语水平的关系

大部分嵌入式编程所用的编程语言大都是英文的,但是很少使用复杂的英语单词。在查看数据手册和查询函数的时候也需要用到英语,只要能记住一些关键单词是可以应付的,实在不会的也可以借助电子词典理解。总体来说,不精通英语对学习嵌入式开发的影响并不是很大。

1.8.3 嵌入式开发学习和数电、模电的关系

嵌入式系统主要分为软件和硬件两部分。嵌入式系统软件主要使用编程语言和编译软件开发,同时还要硬件辅助,也就是说我们开发嵌入式软件时也要熟悉硬件,但没必要为此专门去学习硬件。相关的专业课有数字电路(简称数电)、模拟电路(简称模电),虽然这些课对我们学习嵌入式开发会有帮助,但是一些读者如果没学过数字电路、模拟电路,影响也不大。

1.8.4 嵌入式开发学习和专业的关系

嵌入式开发比较适合电子、自动化、通信、测控或其他理工类专业的人学习,当然如果非常热爱嵌入式开发,非理工类专业的人也是可以学习的,但是可能需要花费更多的时间。如果读者学习了C语言或者类似的编程课程,会更容易学习嵌入式开发。

1.8.5 嵌入式开发学习和个人性格的关系

学习嵌入式开发的兴趣和志向是很重要的,有兴趣和志向能让我们自觉地去学习,去寻找学习嵌入式开发的方法。学习能力和专注度也是很重要的,学习嵌入式开发需要集中注意力,也需要有良好的思维方式。最重要的是态度,态度决定一切。

1.9 嵌入式系统的构成、特点和发展方向

1.9.1 嵌入式系统的构成

嵌入式系统由硬件和软件两部分组成,硬件和软件又有很多部分,我们将其粗略分层,如图1-3所示。

图1-3

硬件部分最重要的有CPU、存储器、I/O(输入输出)接口、输入输出设备等。

软件部分主要包括两部分,即操作系统和应用程序。底层就是嵌入式操作系统,我们把驱动归于这个部分,因为驱动其实在操作系统中可扩展,其中板级支持包(Board Support Package,BSP)是已经调试好的用来支持设备的驱动。应用程序属于上层,使用驱动提供的软件接口配合操作系统来操控底层的硬件实现某些功能,例如图形用户界面(Graphical User Interface,GUI)、通用分组无线业务(General Pucket Radio Service,GPRS)、3G等。

将整体的复杂功能分层后,既能使人容易理解,又能缩短开发周期,降低开发难度。硬件开发主要由硬件工程师完成。软件开发一般分为两部分:平台开发(驱动开发和内核移植)和应用程序开发。我们学习的时候主要学习操作系统的驱动和应用程序开发,而且学习过程中先学习操作系统和应用程序开发,然后学习驱动开发。

1.9.2 嵌入式系统的特点

特定性、软硬件可裁剪可配置:嵌入式系统应用于特定功能的嵌入式设备,系统软硬件可裁剪可配置。如电视机机顶盒和空调嵌入式系统,它们都是裁剪某一部分功能后形成的专用嵌入式系统——电视机机顶盒是用来“播放”电视节目的,而空调是用来调节室内温度的。

低功耗、高可靠性、高稳定性:一些嵌入式领域对功耗要求是很高的,如我们最常见的穿戴设备,在相同的使用条件下,设备功耗越低就意味着用户需对其充电的次数越少,这会使其有很大的市场竞争力;再如一些无人值守但是需要电池供电的设备,其对功耗有很高的要求,我们现在使用的共享单车,如果没电了就不能使用了,而维护是很费力的。一些嵌入式领域对稳定性和可靠性要求很高,如类似于电梯等供人类使用的特种设备,要求必须有很高的稳定性。

软件代码短小精悍:相对于PC、服务器等大型计算机设备中的非嵌入式设备,嵌入式系统代码高效、短小。

代码可固化:代码可固化就是能将代码烧录进设备,并保证设备每次上电启动后,代码都能正常运行。

实时性:很多工业产品对操作系统的实时性要求很高,但是也有很多设备对实时性要求不是很高。而通常基于复杂操作系统的嵌入式系统对实时性要求不是很高,它主要用来实现一些复杂功能。基于单片机的嵌入式系统在一些场合的实时性要求较高。一些对时间要求高的相对复杂的控制系统会使用STM32系列等的高性能单片机,并移植一些类似于FreeRTOS、µC/OS等的实时操作系统来进行控制。

弱交互性:交互性体现在人与系统之间的沟通上。如手机等基于Android系统的消费电子产品的交互性是比较强的,但是大部分的嵌入式设备交互性比较弱,如路由器、机顶盒等设备,一般很少与人交互。

专业开发工具及开发环境:嵌入式系统需要专业的开发工具和开发环境,我们需要对Linux系统有较深入的理解。开发中需要的工具,如下载器等都是专业的设备。

专业开发人员:嵌入式开发需要专业人员,如Linux系统的开发都是在命令行下进行的,不懂它的人一般是不能使用它进行开发的。

1.9.3 嵌入式系统的发展方向

嵌入式系统最开始以单芯片为核心、可编程控制器存在的形式应用,特点如下。

没有操作系统支持。

软件使用的语言以汇编语言为主。

功能单一,处理效率低,存储容量小,没有对外接口。

使用简单,价格低。

之后发展成以嵌入式CPU为基础、简单操作系统为核心的形式来应用,特点如下。

CPU种类多,通用性弱。

系统开销小,效率高。

具有一定兼容性、拓展性。

用户体验度不好,交互界面不够友好。

进而发展成以嵌入式操作系统为标志的形式来应用,特点如下。

兼容性好,适用于不同平台。

系统开销小,效率高,具有高度模块化特性及拓展性。

图形化界面,用户交互友好。

丰富的外部接口。

如今发展成以物联网为标志的形式来应用,特点如下。

将传感器技术、互联网技术及传统嵌入式技术相结合。

小型化、智能化、网络化及可视化。

低功耗、绿色环保。

支持多核技术SWP(指对存储单元的一次读操作)、云计算技术及虚拟化技术。

1.10 交叉编译

1.10.1 软件开发的两种模式

非嵌入式开发是在A(类)机编写源码、编译得到可执行程序,发布给A(类)机运行。如开发QQ软件,在使用Windows操作系统(简称Windows系统)的计算机中编写程序,然后编译得到可执行程序,发布在使用Windows系统的计算机上,用户也在Windows系统的计算机上打开QQ,这就是非嵌入式开发。这种开发模式是开发环境和应用环境相同。

嵌入式开发是在A(类)机编写源码、编译得到可执行程序,发布给B(类)机运行。如在计算机上编写程序,编译程序,然后使其在路由器上执行,这就是嵌入式开发的一个简易过程。这种开发模式的开发环境和应用环境不同,即交叉编译。嵌入式开发所应用的硬件平台比较简单,本身无法搭建开发环境,有些甚至连操作系统都没有。通过交叉编译可以用高性能机器为低性能机器开发软件(包括裸机开发、系统级开发和应用级软件开发)。

1.10.2 交叉编译的特点

交叉编译必须使用专用的交叉编译工具链。交叉编译工具链一般由编译器、链接器、解释器和调试器组成。由于可执行程序不能本地运行、调试,因此必须配合一定手段[如专用调试器、JTAG(Joint Test Action Group,联合测试工作组)调试器、USB下载、串口下载、SD卡启动、网络共享等]将可执行程序加载到目标嵌入式设备上运行、调试。

1.11 CPU的设计原理、地址总线/数据总线/控制总线

1.11.1 CPU的设计原理

如图1-4所示,CPU是SoC的一部分。CPU主要包括寄存器、运算器、控制器。寄存器主要用来存储外来的数据;运算器主要用来做一些计算,如加、减、乘、除等;控制器主要用来执行一些指令。CPU本身不包括内存,内存是通过总线接到CPU上的。程序编写好后,通过下载存放在闪存(Flash Memory,简写为Flash)中。代码的运行过程为,CPU先将程序通过总线接口从Flash读出来,然后通过主线接口写到内存[此处为双倍速率同步动态随机存储器(Double Data Rate SDRAM),习惯称为DDR],程序在内存中运行。内部总线连接的是串口控制器(如UART),其代表了内部外设。SoC还包括外部外设的接口,用于连接外部外设。内部总线比外部总线的传输速度更快、更稳定。

图1-4

1.11.2 地址总线、数据总线和控制总线

总线可分为地址总线、数据总线和控制总线。地址总线传输的是地址,数据总线传输的是数据,控制总线传输的是命令。图1-4中CPU向内存写入信息是通过总线接口实现的,其过程使用到了这3类总线:写入内存中的数据是通过数据总线传输的,数据写入内存的哪个位置需要地址总线来寻址,什么时刻开始写入数据的命令通过控制总线来下达。

地址总线的位数决定CPU寻址空间(32位的地址总线最大寻址空间是4GB),数据总线的位数决定CPU单次通信能交换的信息数量(32位就是单次能传输32位的数据),总线的速度决定CPU和外设互换信息的速度。

CPU的位数指的是数据总线的位数。CPU的地址总线位数和数据总线的一般是相同的,但是也可以不同,典型代表就是51单片机,51单片机的数据总线有8位,地址总线有16位。

1.12 嵌入式辅助开发工具

嵌入式开发的特点决定了嵌入式开发需要用到一些辅助工具,一般使用的工具有JLink仿真器、SD卡、USB转串口、网线等。

JLink仿真器有两个作用:一是可以下载可执行程序到目标机;二是可以在目标机上实现单步调试,便于开发BootLoader(引导加载程序)。

SD卡作为启动介质,其工作方式是:利用读卡器将SD卡连接到开发机(一般是使用Windows系统的计算机),通过写卡软件将交叉编译得到的可执行程序镜像烧录到SD卡,然后将SD卡插入嵌入式目标机卡槽,设置正确的启动方式并启动,则系统可以从SD卡中烧录的可执行程序镜像处启动。

串口用来监视嵌入式目标机的输出,主要输出调试信息。因为现在大部分的PC都未配置DB9串口,所以开发中一般使用USB转串口来连接PC和开发板。

网线可以连接目标机和开发机,用来监视嵌入式目标机输出,也可以用作不同的嵌入式设备之间的通信介质。

1.13 习题

1.对ARM7和ARMv7版本号进行简要的解释。

2.ARM处理器采用以下哪种体系结构?( )

  A.RISC   B.CISC   C.x86   D.MIPS

3.使用单一平板地址的ARM地址空间(地址总线32位),最大寻址空间为( )。

  A.2GB   B.4GB   C.1GB   D.8GB

4.简述ARM公司的Cortex系列处理器的不同应用方向。

相关图书

嵌入式Linux软硬件开发详解——基于S5PV210处理器
嵌入式Linux软硬件开发详解——基于S5PV210处理器
嵌入式 Linux C 语言应用程序设计(修订版)
嵌入式 Linux C 语言应用程序设计(修订版)
嵌入式Linux开发实用教程
嵌入式Linux开发实用教程
嵌入式 Linux应用程序开发标准教程(第2版)
嵌入式 Linux应用程序开发标准教程(第2版)
嵌入式Linux应用开发完全手册
嵌入式Linux应用开发完全手册

相关文章

相关课程