嵌入式ARM系统开发与实战(txt+pdf+epub+mobi电子书下载)

作者:周中孝,周永福,等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

嵌入式ARM系统开发与实战

嵌入式ARM系统开发与实战试读:

内容简介

本书主要面向学习嵌入式ARM开发的初学者、嵌入式爱好者,以及刚从单片机向ARM处理器转型的电子工程师等,按照理论与实践相结合的思想,介绍了在ARM开发中常用的一些模块,结合具体的实例,给大家建立一个完整的ARM知识架构,包括对C、汇编语言的灵活运用,以及芯片内部寄存器的使用。本书共享源代码和相关资料,详细请登录网站www.edu118.com。

本书内容完整,注重实践性,都是从实际项目中抽取实例,读者可在开发过程中直接作为参考,大大提高工作效率。

本书由浅入深、循序渐进、实例丰富、步骤详细,适合嵌入式开发人员参考,也可作为高校嵌入式相关专业教材使用。

未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。

版权所有,侵权必究。

图书在版编目(CIP)数据

嵌入式ARM系统开发与实战/周中孝等编著.—北京:电子工业出版社,2014.7(信盈达技术创新系列图书)

ISBN 978-7-121-22924-4

Ⅰ.①嵌… Ⅱ.①周… Ⅲ.①微处理器-系统设计 Ⅳ.①TP332

中国版本图书馆CIP数据核字(2014)第069262号

策划编辑:张 剑(zhang@phei.com.cn)

责任编辑:周宏敏  文字编辑:张 迪

印 刷:北京季峰印刷有限公司

装 订:北京季峰印刷有限公司

出版发行:电子工业出版社

     北京市海淀区万寿路173信箱 邮编100036

开  本:787×1092 1/16 印张:23 字数:588.8千字

印  次:2014年7月第1次印刷

印  数:3000册  定  价:49.80元

凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。

质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。

服务热线:(010)88258888。前 言

ARM可以说是一种技术、一种芯片,也可以说是一家公司。本书所描述的是英国ARM公司设计的主流嵌入式处理器之ARM9系列,主要包括ARM9TDMI和ARM9E-S等系列。在嵌入式领域中,基于ARM的应用,目前占用了较大的市场。但是,目前仍然有许多工程师习惯于单片机开发,还有一些从来没接触过ARM的高校大学生,在刚接触ARM开发设计的时候,都会觉得很难入门,遇到架构看不懂、程序无法理解等问题。另外,很多相关ARM技术的一些开发手册中对于ARM开发中一些常用模块的原理及驱动程序讲解不够深入、透彻,没有完全从裸机的角度去讲解开发。本书面对以上问题,在模块驱动、硬件分析,以及架构讲解上极好地弥补了这些不足。尽管如此,对于ARM的初学者,刚开始还是需要静下心来去体味本书对ARM体系架构的概述,很多人在了解完GPIO这一章内容后会掉以轻心,觉得ARM的操作相对于单片机也不怎么难。但是,进入到后面的模块,如UART部分,马上就不适应了,越往后越看不懂。所以,在通过本书去学习ARM的同时,要多注意总结,去归纳一个学习的方法,当把ARM体系架构了解清楚之后,所有的疑点将会豁然开朗。

1.本书的编写原则(1)注重原理。每个模块从细节上去分析功能,虽然在很多章节里面文字篇幅比较大,显得非常啰唆,但是对于学习嵌入式ARM开发的初学者来说,可以从最基本的角度去了解每个模块的工作原理,为其提供了一个最完整、最细腻的开发过程。(2)代码的实用性。每个模块的代码都是经过实际验证的,在C编程上注重代码的函数化、宏调用及各种位和逻辑的运算,严格按照编程规范,并且做到通俗易懂。所以,在学习代码的过程中,掌握C编程的要领和规范后,在编程的道路上就会事半功倍。(3)强调硬件。对于嵌入式ARM开发的学习,从裸机角度上来说,实际上就是学习芯片架构和外围硬件电路。所以,本书在内容的讲解上强调与硬件相结合,从硬件本身去分析各个模块的功能,深入到时序、引脚功能、电平转换和物理现象等,力求为读者打造一个最完善的ARM学习平台。(4)多做学习总结。在这个发展迅速的电子世界中,处理器的更新换代是非常快的,本书在各个模块的讲解中会有很多学习的总结,“什么是通信”、“存储器的特点”、“中断的处理过程”等问题在书中都有很好的总结。只要掌握了方法,无论技术如何更新换代,都能够运筹帷幄。

本书内容侧重于实用性,所有硬件基于深圳信盈达电子有限公司的2440学习平台,为了便于读者查阅和与原文保持一致,本书对某些不符合国家标准的图形、符号等未作改动,未对某些原图或表进行翻译,特此说明。

2.致谢

参与本书编写的还有深圳信盈达电子有限公司牛乐乐、陈志发、王苑增、黄文涛、刘浚、蒙海进、张鹏飞、毛爽等人。在此一并表示感谢。

由于编者水平有限,书中难免有不恰当的地方,恳请各位老师及同行提出宝贵的意见,联系邮箱:niusdw@163.com,欢迎来信交流。编著者2014年3月第1章 ARM、嵌入式系统介绍1.1 ARM微处理器概述

1.1.1 ARM简介

ARM是Advanced RISC Machines的缩写,它是微处理器行业中的一家知名企业,该企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。

ARM公司的特点是只设计芯片,但不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务,如图1.1所示。图1.1 ARM授权树状图

ARM-Advanced RISC Machines,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。

1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。

ARM公司是专门从事基于RISC(RISC—Reduced Instruction Set Computer,精简指令集计算机)。作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统的成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。

1.1.2 ARM微处理器的应用领域及特点

1.ARM微处理器的应用领域

到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域。

1)工业控制领域:基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比向传统的8位/16位微控制器提出了挑战。

2)无线通信领域:目前已有超过85%的无线通信设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。

3)网络应用:随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上进行了优化,并获得了广泛的支持,也对DSP的应用领域提出了挑战(实际还不如DSP,就像单片机中内部集成了AD/DA一样,毕竟还是不如单独的AD/DA芯片)。

4)消费类电子产品: ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛应用。

5)成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM技术。手机中的32位SIM智能卡也采用了ARM技术。

除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。

2.ARM微处理器的特点

采用RISC架构的ARM微处理器一般具有如下特点。

1)体积小、低功耗、低成本、高性能。

2)支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8位/16位器件。

3)大量使用寄存器,指令执行速度更快。

4)大多数数据操作都在寄存器中完成。

5)寻址方式灵活简单,执行效率高。

6)指令长度固定(32位或16位)。

1.1.3 ARM微处理器系列

ARM微处理器目前包括下面几个系列,以及其他厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。

-ARM7系列

-ARM9系列

-ARM9E系列

-ARM10E系列

-SecurCore系列

-Inter的Xscale

-Inter的StrongARM

-Cortex-R系列针对实时系统设计,支持ARM、Thumb和Thumb-2指令集

-Cortex-M系列(2008年推出,基于V7架构。如LPC1300,不带USB 0.69美元/ 10KPCS,带USB 0.99美元/10KPCS)

-Cortex-A(2008年推出,Cortex-A8第一款基于ARMv7构架的应用处理器)

其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。

以下我们来详细了解一下各种处理器的特点及应用领域。

1.ARM7系列微处理器

ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7系列微处理器具有如下特点。

1)具有嵌入式ICE-RT逻辑,调试开发方便。

2)极低的功耗,适合对功耗要求较高的应用,如便携式产品。

3)能够提供0.9MIPS/MHz的三级流水线结构。

4)代码密度高并兼容16位的Thumb指令集。

5)对操作系统的支持广泛,包括Windows CE、Linux、UC/OS等。

6)指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。

7)主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。

ARM7系列微处理器的主要应用领域为工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。

2.ARM9系列微处理器

ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点。

1) 5级整数流水线,指令执行效率更高。

2)提供1.1MIPS/MHz的哈佛结构。

3)支持32位ARM指令集和16位Thumb指令集。

4)支持32位的高速AMBA总线接口。

5)全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。

6) MPU支持实时操作系统。

7)支持数据Cache和指令Cache,具有更高的指令和数据处理能力。

ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。

3.ARMCortex-A8处理器

Cortex-A8是第一款基于ARMv7构架的应用处理器。是ARM公司有史以来性能最强劲的一款处理器,主频为600MHz~1GHz。Cortex-A8可以满足各种移动设备的需求,其功耗低于300mW,而性能却高达2000MIPS。

Cortex-A8是ARM公司第一款超级标量处理器,在该处理器的设计当中,采用了新的技术以提高代码效率和性能。在Cortex-A8中采用了专门针对多媒体和信号处理的NEON技术,同时还采用了Jazelle RCT技术,可以支持JAVA程序的预编译与实时编译。

针对Cortex-A8处理器,ARM公司专门提供了新的函数库(Artisan Advantage-CE)。新的库函数可以有效地提高异常处理的速度并降低功耗,同时新的库函数还提供了高级内存泄漏控制机制。

结构特性为Cortex-A8采用了复杂的流水线构架。

A.顺序执行、同步执行的超标量处理器内核。

13级主流水线; 10级NEON多媒体流水线;专用的L2缓存;基于执行记录的跳转预判断。

B.针对强调功耗的应用,Cortex-A8采用了一个优化的装载/存储流水线,可以提供2 DMIPS/MHz的性能。

C.采用ARMv7构架。

支持THUMB-2,提供了更高的性能,改善了功耗和代码效率;支持NEON信号处理,增强了多媒体处理能力;采用了新的Jazelle RCT技术,增强了对JAVA的支持;采用了TrustZone技术,增强了安全性能。

D.集成了L2缓存。

编译的时候,可以把缓存当成标准的RAM进行处理;缓存大小可以灵活配置;缓存的访问延迟可以编程控制。

E.优化的L1缓存。

可以提高访问存储速度,并降低功耗。

F.动态跳转预判断。

基于跳转目的和执行记录的预判断;提供高达95%的准确性;提供重放机制以有效地降低预判错误带来的性能损失。

4.ARMCortex-M3处理器

ARM Cortex-M3是一个32位的核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。例如,在工控领域,用户要求具有更快的中断速度。Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%的中断。

单片机的另外一个特点是调试工具非常便宜,不像ARM的仿真器动辄几千上万,针对这个特点,Cortex-M3采用了新型的单线调试(Single Wire)技术,专门拿出一个引脚来做调试,从而节约了大笔的调试工具费用。同时,Cortex-M3中还集成了大部分存储器控制器,这样工程师可以直接在MCU外连接Flash,降低了设计难度和应用障碍。ARM Cortex-M3处理器结合了多种突破性技术,令芯片供应商提供超低费用的芯片,仅33000门的内核性能可达1.2DMIPS/MHz。该处理器还集成了许多紧耦合系统外设,令系统能满足下一代产品的控制需求。

Cortex-M3的优势应该在于低功耗、低成本、高性能三者(或二者)的结合。关于编程模式,Cortex-M3处理器采用ARMv7-M架构,它包括所有的16位Thumb指令集和基本的32位Thumb-2指令集架构,Cortex-M3处理器不能执行ARM指令集。Thumb-2在Thumb指令集架构(ISA)上进行了大量的改进,它与Thumb相比,具有更高的代码密度并提供16/32位指令的更高性能。

1.1.4 ARM微处理器结构

1.RISC体系结构

传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)结构有其固有的缺点,即随着计算机技术的发展而不断引入新的复杂的指令集,为支持这些新增的指令,计算机的体系结构会越来越复杂,然而,在CISC指令集的各种指令中,其使用的频率却相差悬殊,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%,显然,这种结构是不合理的。

基于以上的不合理性,1979年美国加州大学伯克利分校提出了RISC(Reduced Instruction Set Computer,精简指令集计算机)的概念,RISC并非只是简单地去减少指令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。RISC结构优先选取使用频率最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻址方式种类减少;以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。到目前为止,RISC体系结构也还没有严格的定义,一般认为,RISC体系结构应具有如下特点。

1)采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。

2)使用单周期指令,便于流水线操作执行。

3)大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。除此以外,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗,所有的指令都可根据前面的执行结果决定是否被执行(条件执行),从而提高指令的执行效率。

4)可用加载/存储指令批量传输数据,以提高数据的传输效率。

5)可在一条数据处理指令中同时完成逻辑处理和移位处理。

6)在循环处理中使用地址的自动增减来提高运行效率。

当然,和CISC架构相比较,尽管RISC架构有上述的优点,但绝不能认为RISC架构就可以取代CISC架构。事实上,RISC和CISC各有优势,而且界限并不是那么明显。现代的CPU往往采用CISC的外围,内部加入了RISC的特性,如超长指令集CPU就是融合了RISC 和CISC的优势,成为未来CPU发展的方向之一。

2.ARM微处理器的寄存器结构

ARM微处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:①31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器;②6个状态寄存器,用以标示CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。

同时,ARM微处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)(快中断模式除外)、1~2个状态寄存器(CPSR和SPSR,没有用户模式和系统模式)和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。关于ARM微处理器的寄存器结构,在后面的相关章节中将会详细描述。

3.ARM微处理器的指令结构

ARM微处理器的指令结构在较新的体系结构中支持两种指令集: ARM指令集和Thumb指令集。其中,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%的存储空间,同时具备32位代码的所有优点。

关于ARM微处理器的指令结构,在后面的相关章节中将会详细描述。

1. 1. 5 ARM微处理器的应用选型

鉴于ARM微处理器的众多优点,随着国内外嵌入式应用领域的逐步发展,ARM微处理器必然会获得广泛的重视和应用。但是,由于ARM微处理器有多达十几种的内核结构,几十个芯片生产厂家,以及千变万化的内部功能配置组合,给开发人员在选择方案时带来了一定的困难,所以,对ARM芯片做一些对比研究是十分必要的。

以下从应用的角度出发,对在选择ARM微处理器时所应考虑的主要问题做一些简要的探讨。从应用的角度出发,在选择ARM微处理器时所应考虑的主要问题有以下几个方面。

1.ARM微处理器内核的选择

ARM微处理器包含一系列的内核结构,以适应不同的应用领域。如果用户希望使用WinCE或标准Linux等操作系统以减少软件开发时间,就需要选择ARM720T以上带有MMU (Memory Management Unit)功能的ARM芯片,如ARM720T、ARM920T、ARM922T、ARM946T、Strong-ARM都带有MMU功能。

2.系统的工作频率

系统的工作频率在很大程度上决定了ARM微处理器的处理能力。ARM7系列微处理器的典型处理速度为0.9MIPS/MHz,常见的ARM7芯片的系统主时钟为20~133MHz,ARM9系列微处理器的典型处理速度为1.1MIPS/MHz,常见的ARM9芯片的系统主时钟频率为100 ~233MHz,ARM10最高可以达到700MHz。MIPS的含义为百万条指令每秒。

3.芯片内存储器的容量

大多数的ARM微处理器芯片内存储器的容量都不大,需要用户在设计系统时外扩存储器,但也有部分芯片具有相对较大的片内存储空间。

4.片内外围电路的选择

除ARM微处理器内核以外,几乎所有的ARM芯片均根据各自不同的应用领域,扩展了相关功能模块,并集成在芯片之中,我们称之为片内外围电路,如USB接口、IIS接口、LCD控制器、键盘接口、RTC、ADC和DAC、DSP协处理器等。1.2 嵌入式系统的概念

1.2.1 嵌入式系统的定义

目前,对嵌入式系统的定义多种多样,但没有一种定义是全面的。下面给出两种比较合理的定义。

从技术的角度定义:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语反映了这些嵌入式系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。

嵌入式系统举例———汽车控制系统(详见图1.2)。图1.2 汽车控制系统

1.2.2 嵌入式系统的发展过程

1.嵌入式微处理器(单板计算机)

嵌入式微处理器的基础是通用计算机中的CPU。在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统的体积和功耗,如图1.3所示。图1.3 单板计算机

为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。嵌入式微处理器及其存储器、总线、外设等安装在一块电路板上,称为单板计算机,如STD-BUS、PC104等。但是在电路板上必须包括ROM、RAM、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。现在已经用得比较少了。

嵌入式微处理器目前主要有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM系列等。嵌入式微处理器又可分为CISC和RISC两类。大家熟悉的大多数台式PC都是使用CISC微处理器,如Intel的x86。RISC结构体系有两大主流: Silicon Graphics公司(硅谷图形公司)的MIPS技术和ARM公司的Advanced RISCMachines技术。此外,Hitachi(日立公司)也有自己的一套RISC技术SuperH。

嵌入式微处理器的选型原则如下。

1)调查市场上已有的CPU供应商。

2) CPU的处理速度。

3)技术指标。

4)处理器的低功耗。

5)处理器的软件支持工具。

6)处理器是否内置调试工具。

7)处理器供应商是否提供评估板。

选择一个嵌入式系统运行所需要的微处理器,在很多时候运算速度并不是最重要的考虑内容,有时候也必须考虑微处理器制造厂商对于该微处理器的支持态度。有些嵌入式系统产品一用就是几十年,如果过了五六年之后需要维修,却已经找不到该种微处理器的话,势必会造成全部产品都要淘汰,所以许多专门生产嵌入式系统微处理器的厂商都会为嵌入式系统的微处理器留下足够的库存或是生产线,即使过好几年之后还可以找到相同型号的微处理器或者完全兼容的替代品。

2.嵌入式微控制器(单片机)MCU

嵌入式微控制器又称单片机,它将整个计算机系统集成在一块芯片中,如图1.4和图1.5所示。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/ EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A、Flash、EEPROM等各种必要的功能和外设。为适应不同的应用需求,一般一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都是一样的,不同的是存储器和外设的配置及封装,这样可以使单片机最大限度地和应用需求相匹配,功能不多不少,从而减少功耗和成本。图1.4 嵌入式微控制器图1.5 嵌入式微控制器芯片的内部图

和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。

嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300、数目众多的ARM芯片等。目前MCU占嵌入式系统约70%的市场份额。

3.嵌入式处理器—DSP处理器

DSP处理器对系统的结构和指令进行了特殊设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也较高。在数字滤波、FFT、频谱分析等方面DSP算法正在大量进入嵌入式领域,DSP应用正从在通用单片机中以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。

4.嵌入式处理器—嵌入式片上系统(SOC)(ARM也属于SOC系统)

随着EDA的推广和VLSI设计的普及化及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是System On Chip(SOC)。各种通用处理器内核将作为SOC设计公司的标准库,和许多其他嵌入式系统外设一样,成为VLSI设计中一种标准的器件,用标准的VHDL等语言描述,存储在器件库中。用户只需要定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统大部分均可集成在一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。

SOC可以分为通用和专用两类。通用系列包括Infineon的TriCore、Motorola的MCore、某些ARM系列器件、Echelon和Motorola联合研制的Neuron芯片等。专用SOC一般专用于某个或某类系统中,不为一般用户所知。一个有代表性的产品是Philips的Smart XA,它将XA单片机内核和支持超过2048位复杂RSA算法的CCU单元制作在一块硅片上,形成一个可加载JAVA或C语言的专用SOC,可用于公众互联网,如Internet安全方面。1.3 嵌入式操作系统

1.3.1 概述

计算机系统由硬件和软件组成,在发展初期没有操作系统这个概念,用户使用监控程序来使用计算机,如图1.6所示。随着计算机技术的发展,计算机系统的硬件、软件资源也越来越丰富,监控程序已不能适应计算机应用的要求。于是在20世纪60年代中期,监控程序又进一步发展形成了操作系统(Operating System)。发展到现在,广泛使用的有3种操作系统,即多通道批处理操作系统、分时操作系统,以及实时操作系统。图1.6 操作系统类别

提到桌面型计算机的操作系统,全世界超过九成的PC使用的是微软(Microsoft)公司的Windows操作系统,其他也有一些颇具知名度的操作系统,如苹果(Apple)公司的MacOS、工作站级计算机常用的Sun公司的Solaris,还有Linux或是FreeBSD等免费的操作系统。但是提到嵌入式系统中所使用的操作系统,一般用户就很少了解了。由于大型嵌入式系统需要完成复杂的功能,所以需要操作系统来完成各任务之间的调度。由于桌面型操作系统的体积,以及实时性等特性不能满足嵌入式系统的要求,从而促进了嵌入式操作系统的发展。

1.3.2 操作系统图1.7 操作系统的示意图

操作系统定义:操作系统(OS,Operating System)的基本思想是隐藏底层不同硬件的差异,向在其上运行的应用程序提供一个统一的调用接口。应用程序通过这一接口实现对硬件的使用和控制,不必考虑不同硬件操作方式的差异。操作系统的示意图如图1.7所示。

很多产品厂商选择购买操作系统,在此基础上开发自己的应用程序,形成产品。事实上,因为嵌入式系统是将所有程序全部烧写进ROM里执行,包括操作系统、驱动程序、应用程序,所以操作系统在这里的角色更像是一套函数库(Library)。

操作系统主要完成三项任务:内存管理、多任务管理和外围设备管理。

操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬件资源的分配与回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。

嵌入式操作系统(Embedded Operating System):嵌入式操作系统负责嵌入式系统的全部软硬件资源的分配、调度、控制、协调;它必须体现其所在系统的特征,能够通过加载/卸载某些模块来达到系统所要求的功能。

嵌入式系统的操作系统核心通常体积要很小,因为硬件ROM的容量有限,除了应用程序之外,不希望操作系统占用太大的存储空间。事实上,嵌入式操作系统可以很小,只提供基本的管理功能和调度功能。缩小到10~20KB范围内的嵌入式操作系统比比皆是,相信用惯微软的Windows系统的用户,可能会觉得不可思议。

不同的应用场合会产生不同特点的嵌入式操作系统,但都会有一个核心(Kernel)和一些系统服务(System Service)。操作系统必须提供一些系统服务供应用程序调用,包括文件系统、内存分配、I/O存取服务、中断服务、任务(Task)服务、时间(Timer)服务等,设备驱动程序(Device Driver)则是要建立在I/O存取和中断服务上的。有些嵌入式操作系统也会提供多种通信协议,以及用户接口函数库等。嵌入式操作系统的性能通常取决于核心程序,而核心的工作主要是任务管理(Task Management)、任务调度(Task Scheduling)、进程间的通信(IPC)、内存管理(Memory Management)。

1.3.3 实时操作系统(RTOS)

实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。实时操作系统(Real-Time Operating System,RTOS)是指操作系统本身要能在一个固定时限内对程序调用(或外部事件)做出正确的反应,也即对时序与稳定性的要求十分严格。目前国际较为知名的实时操作系统有WindRiver的“VxWorks”、QNX的“NeutrinoRTOS”、Accelerated Technology的“Nucleus Plus”、Radisys的“OS/9”、Mentor Graphic的“VRTX”、LynuxWorks的“LynuxOS”,以及Embedded Linux厂商所提供的Embedded Linux版本,如TimeSys的“TimeSys Linux/Real Time”、FSMLabs的“RTLinux”、Lynux Works的“BlueCat RT”等,其产品主要应用于航天、国防、医疗、工业控制等领域,这些领域的设备需要高度精确的实时操作系统,以确保系统任务的执行不会发生难以弥补的意外。目前,实时操作系统也开始向信息家电等消费类电子产品领域扩展。例如,WindRiver的“VxWorks”原本从航天、国防领域起家,如今也应用在网络电话、视频转换器等消费类电子产品上。

1.实时操作系统的特点

IEEE的实时UNIX分委会认为实时操作系统应具备以下的几点。

1)异步的事件响应。

2)切换时间和中断延迟时间确定。

3)优先级中断和调度。

4)抢占式调度。

5)内存锁定。

6)连续文件。

7)同步。

总的来说,实时操作系统是事件驱动的,能对来自外界的作用和信号在限定的时间范围内做出响应。它强调的是实时性、可靠性和灵活性,与实时应用软件相结合成为有机的整体,起着核心作用,由它来管理和协调各项工作,为应用软件提供了良好的运行软件环境及开发环境。从实时操作系统的应用特点来看,实时操作系统可以分为两种:一般实时操作系统和嵌入式实时操作系统。一般实时操作系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统,并且提供了开发、调试、运用一致的环境;嵌入式实时操作系统应用于实时性要求高的实时控制系统,而且应用程序的开发过程是通过交叉开发来完成的,即开发环境与运行环境是不一致的。嵌入式实时操作系统具有规模小(一般在几千字节到几十千字节范围内)、可固化使用实时性强(在毫秒或微秒数量级上)的特点。

2.使用实时操作系统的必要性

嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得越来越重要。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。使用实时操作系统主要有以下几个因素。

1)嵌入式实时操作系统提高了系统的可靠性。

2)嵌入式实时操作系统提高了开发效率,缩短了开发周期。

3)嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。

3.实时操作系统的优缺点

优点:在嵌入式实时操作系统环境下开发实时应用程序,使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能;通过将应用程序分割成若干个独立的任务模块,使应用程序的设计过程大为简化;实时性要求苛刻的事件都得到了快速、可靠的处理;通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。

缺点:使用嵌入式实时操作系统还需要额外的ROM/RAM开销、2%~5%的CPU额外负荷,以及内核的费用。

1.3.4 通用型操作系统

通用型操作系统的执行性能与反应速度比起实时操作系统,相对没有那么严格。目前较知名的有Microsoft的“Windows CE”、Palm source的“Palm OS”、Symbian的“Symbian OS”,以及Embedded Linux厂商所提供的各式Embedded Linux版本,如Metrowerks的“Embedix”、TimeSys的“TimeSys Linux/GPL”、LynuxWorks的“BlueCat Linux”、PalmPalm的“Tynux”等,其产品主要应用于手持式设备、各式联网家电、网络设备等领域。

1.3.5 嵌入式常见的几个概念

1.前后台系统

对基于芯片的开发来说,应用程序一般是一个无限的循环,可称为前后台系统或超循环系统。很多基于微处理器的产品采用前后台系统设计。例如,微波炉、电话机、玩具等。在另外一些基于微处理器应用中,从省电的角度出发,平时微处理器处在停机状态,所有事都靠中断服务来完成,如图1.8所示。图1.8 前后台系统

2.代码的临界区

代码的临界区也称为临界区,指处理时不可分割的代码,运行这些代码时不允许被打断。一旦这部分代码开始执行,则不允许任何中断打入(这不是绝对的,如果中断不调用任何包含临界区的代码,也不访问任何临界区使用的共享资源,则这个中断可能执行)。为确保临界区代码的执行,在进入临界区之前要关掉中断,而临界区代码执行完成以后要立即开启中断。

3.资源

程序运行时可使用的软硬件环境统称为资源。资源可以是输入、输出设备,例如,打印机、键盘、显示器等,也可以是一个变量、一个结构或一个数组等。

4.共享资源

可以被一个以上任务使用的资源叫共享资源。为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫互斥,如图1.9所示。图1.9 共享资源

5.任务

一个任务,也称为一个线程,是一个简单的程序,该程序可以认为CPU完全属于该程序自己。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。

6.任务切换

当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。这些内容保存在任务的当前状态保存区,也就是任务自己的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU的寄存器中,并开始下一个任务的运行,这个过程就称为任务切换。

这个过程增加了应用程序的额外负荷。CPU的内部寄存器越多,额外负荷就越重。做任务切换所需要的时间取决于CPU有多少个寄存器要入栈。

7.内核

多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU运行时间,并且负责任务之间的通信。内核提供的基本服务是任务切换。使用实时内核可以大大简化应用系统的设计,这是因为实时内核允许将应用分成若干个任务,然后由实时内核来管理它们。内核需要消耗一定的系统资源,比如2%~5%的CPU运行时间、RAM和ROM等。

内核提供必不可少的系统服务,如信号量、消息队列、延时等。

8.调度

调度是内核的主要职责之一其实就是决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的,每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指CPU总是让处在就绪态的优先级最高的任务先运行。然而,究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是非占先式的还是占先式的内核。

9.非占先式内核

非占先式内核要求每个任务自我放弃CPU的所有权。非占先式调度法也称为合作型多任务,各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理,中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。

10.占先式内核

当系统响应时间很重要时,要使用占先式内核。因此,绝大多数商业上销售的实时内核都是占先式内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻就得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入了就绪状态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。

11.任务优先级

任务的优先级是表示任务被调度的优先程度。每个任务都具有优先级,任务越重要,赋予的优先级应越高,越容易被调度而进入运行状态。

12.中断

中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)上下文即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR),如图1.10所示。中断服务子程序做事件处理,处理完成后,程序返回的情况如下所示。图1.10 不同系统中断过程

1)在前后台系统中,程序回到后台程序。

2)对非占先式内核而言,程序回到被中断了的任务。

3)对占先式内核而言,让进入就绪状态的优先级最高的任务开始运行。

13.时钟节拍

时钟节拍是特定的周期性中断,这个中断可以看成是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在10~200ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大。

1.3.6 常见的嵌入式操作系统

1. Linux

Linux是UNIX操作系统的一种克隆系统,它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。此后借助于因特网,经过全世界各地计算机爱好者的共同努力,现已成为当今世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长,操作界面如图1.11所示。

Linux是目前最为流行的一款开放源代码的操作系统,从1991年问世到现在,不仅在PC平台,还在嵌入式应用中大放光彩,逐渐形成了与其他商业EOS抗衡的局面。目前正在开发的嵌入式系统中,70%以上的项目选择Linux作为嵌入式操作系统。

经过改造后的嵌入式Linux具有适合于嵌入式系统的特点。

1)内核精简,高性能、稳定。

2)良好的多任务支持。

3)适用于不同的CPU体系架构。支持多种体系架构,如X86、ARM、MIPS、ALPHA、SPARC等。

4)可伸缩的结构。可伸缩的结构使Linux适合于从简单到复杂的各种嵌入式应用中。

5)外设接口统一。以设备驱动程序的方式为应用提供统一的外设接口。

6)开放源码,软件资源丰富。广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。

7)完整的技术文档,便于用户的二次开发。

μClinux是一个完全符合GNU/GPL公约的操作系统,完全开放代码。μClinux从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性,它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作,适用于没有虚拟内存或内存管理单元(MMU)的处理器,例如,ARM7TDMI。μClinux通常用于具有很少内存或Flash的嵌入式系统中,它保留了Linux的大部分优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持,以及标准丰富的API等。注意: Linux2.6版本已可以在没有MMU的处理器上运行。

2. Windows CE

Windows CE是微软开发的一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作,它是精简的Windows 95。Windows CE的图形用户界面相当出色。Windows CE具有模块化、结构化和基于Win 32应用程序接口,以及与处理器无关等特点。Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++等)、使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用,如图1.12所示。图1.11 Linux操作系统界面图1.12 Windows CE

从多年前发表Windows CE开始,微软就开始涉足嵌入式操作系统领域,如今历经Windows CE 2.0、Windows CE 3.0,新一代的Windows CE呼应微软.NET的意愿,定名为“Windows CE.NET”(目前最新版本为5.0)。Windows CE主要应用于PDA,以及智能电话(smart phone)等多媒体网络产品。微软于2004年推出了代号为“Macallan”的新版Windows CE系列的操作系统。

Windows CE.NET的目的是让不同语言所写的程序可以在不同的硬件上执行,也就是所谓的.NET Compact Framework,在这个Framework下的应用程序与硬件互相独立无关。而核心本身是一个支持多线程以及多CPU的操作系统。在工作调度方面,为了提高系统的实时性,主要设置了256级的工作优先级,以及可嵌入式中断处理。

如同在PC Desktop环境中一样,Windows CE系列在通信和网络的能力,以及多媒体方面极具优势,其提供的协议软件非常完整,如基本的PPP、TCP/IP、IrDA、ARP、ICMP、Wireless Tunable TCP/IP、PPTP、SNMP、HTTP,等等,几乎应有尽有,甚至还提供了有保密与验证的加密通信,如PCT/SSL。而在多媒体方面,目前在PC上执行的Windows Media和DirectX都已经应用到Windows CE 3.0以上的平台了,这些包括Windows Media Technologies 4.1、Windows Media Player 6.4 Control、DirectDraw API、DirectSound API和DirectShow API,其主要功能就是对图形、影音进行编码译码,以及对多媒体信号进行处理。

3.μC/OS-II

μC/OS-Ⅱ是Jean J. Labrosse在1990年前后编写的一个实时操作系统内核。名称μC/ OS-II来源于术语Micro-Controller Operating System(微控制器操作系统),它通常也称为MUCOS或者UCOS。严格地说,μC/OS-Ⅱ只是一个实时操作系统内核,它仅仅包含了任务调度、任务管理、时间管理、内存管理、任务间通信和同步等基本功能,没有提供输入输出管理、文件管理、网络等额外的服务。但由于μC/OS-Ⅱ良好的可扩展性和源码开放,这些功能完全可以由用户根据需要自己实现。μC/OS-Ⅱ的目标是实现一个基于优先级调度的抢占式实时内核,并在这个内核之上提供最基本的系统服务,例如,信号量、邮箱、消息队列、内存管理、中断管理等。虽然μC/OS-Ⅱ并不是一个商业实时操作系统,但μC/OS-Ⅱ的稳定性和实用性却被数百个商业级的应用所验证,其应用领域包括便携式电话、运动控制卡、自动支付终端、交换机等。

μC/OS-II是一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,其绝大部分源码是用ANSIC写的,只有与处理器的硬件相关的一部分代码用汇编语言编写,使其可以方便地移植并支持大多数类型的处理器。可以说,μC/OS-Ⅱ在最初设计时就考虑到了系统的可移植性,这一点和同样源码开放的Linux很不一样,后者在开始的时候只是用于x86体系结构,后来才将和硬件相关的代码单独提取出来。

目前μC/OS-Ⅱ支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多种体系结构。

μC/OS-II通过了联邦航空局(FAA)商用航行器认证。自1992年问世以来,μC/OS-II已经被应用到数以百计的产品中。μC/OS-II占用很少的系统资源,并且在高校教学使用时不需要申请许可证。

4. VxWorks

VxWorks操作系统是美国WIND RIVER公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。凭借良好的持续发展能力、高性能的内核,以及友好的用户开发环境,其在嵌入式实时操作系统领域占据了一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通信、军事演习、弹道制导、飞机导航等,甚至在1997年4月登陆火星表面的火星探测器上也使用到了VxWorks。

5. eCos

eCos是RedHat公司开发的源代码开放的嵌入式RTOS产品,是一个可配置、可移植的嵌入式实时操作系统,设计的运行环境为RedHat的GNUPro和GNU开发环境。eCOS的所有部分都开放源代码,可以按照需要自由修改和添加。eCOS的关键技术是操作系统的可配置性,允许用户组织自己的实时组件、函数,以及实现方式,特别允许eCOS的开发定制自己的面向应用的操作系统,使eCos能有更广泛的应用范围。

6. uITRON

TRON是指“实时操作系统内核(The Real-time Operating system Nucleux)”,它是在1984年由东京大学的Sakamura博士提出的,目的是为了建立一个理想的计算机体系结构。通过工业界和大学院校的合作,TRON方案正被逐步用到全新概念的计算机体系结构中。

uITRON是TRON的一个子方案,它具有标准的实时内核,适用于任何小规模的嵌入式系统中。日本国内现有很多基于该内核的产品,其中消费电器较多,目前已成为日本事实上的工业标准。

TRON明确的设计目标使其甚至比Linux更适合于做嵌入式应用,内核小,启动速度快,即时性能好,也很适合汉字系统的开发。另外,TRON的成功还来源于如下两个重要的条件。

1)它是免费的。

2)它已经建立了开放的标准,形成了较完善的软硬件配套开发环境,较好地形成了产业化。第2章 ARM外围硬件、实验平台硬件详解2.1 S3C2440系列芯片介绍

2.1.1 S3C2440系列芯片概述

三星公司推出的16/32位RISC微处理器S3C2440A为手持设备和一般类型的应用提供了低价格、低功耗、高性能的小型微控制器的解决方案。

为了降低整体系统成本,S3C2440A提供了一下丰富的内部设备。

1) S3C2440A采用了ARM920T的内核、0.13um的CMOS标准宏单元和存储器单元。其低功耗,简单,优雅,且全静态设计,特别适合于对成本和功率敏感型的应用。它采用了新的总线架构Advanced Micro controller Bus Architecture(AMBA)。

2) S3C2440A的杰出特点是其核心处理器(CPU),是一个由Advanced RISC Machines有限公司设计的16/32位ARM920T的RISC处理器。ARM920T实现了MMU、AMBA、BUS 和Harvard高速缓冲体系结构,这一结构具有独立的16KB指令Cache和16KB数Cache。每个都是由具有8字长的行组成。通过提供一套完整的通用系统外设,S3C2440A减少整体系统成本和无需配置额外的组件。

3)综合对芯片的功能描述,下面将介绍S3C2440A集成的片上功能。1.2V内核供电,1.8V/2.5V/3.3V存储器供电,3.3V外部I/O供电具备16KB的I-Cache 和16KB DCache/MMU微处理器、外部存储控制器(SDRAM控制和片选逻辑)、LCD控制器(最大支持4K色STN和256K色TFT)并提供1通道LCD专用DMA。4通道DMA,并有外部请求引脚。3通道UART(IrDA1.0,64字节Tx FIFO,和64字节Rx FIFO)。2通道SPI。1通道IIC-BUS接口(多主支持)。1通道IIS-BUS音频编解码器接口。AC97解码器接口。兼容SD主接口协议1.0版和MMC卡协议2.11兼容版。2端口USB主机/1端口USB设备(1.1版)。4通道PWM定时器和1通道内部定时器/看门狗定时器。8通道10bit ADC和触摸屏接口。具有日历功能的RTC。相机接口(最大4096×4096像素的投入支持。2048×2048像素的投入,支持缩放)。130个通用I/O端口和24通道外部中断源。具有普通、慢速、空闲和掉电模式。具有PLL片上时钟发生器。

2.1.2 S3C2440系列芯片的特性

1. S3C2440系列芯片的体系结构

1)为手持设备和通用嵌入式应用提供片上集成系统解决方案。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?