嵌入式系统及开发应用--ARM体系结构分析.ppt_第1页
嵌入式系统及开发应用--ARM体系结构分析.ppt_第2页
嵌入式系统及开发应用--ARM体系结构分析.ppt_第3页
嵌入式系统及开发应用--ARM体系结构分析.ppt_第4页
嵌入式系统及开发应用--ARM体系结构分析.ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本资料来源,嵌入式系统及开发应用,第二讲ARM体系结构,Outline,2、ARM体系结构,3、ARM编程模型 工作状态 CPU工作模式 寄存器组织 异常 内存与IO,1、嵌入式微处理器,主流的嵌入式微处理器,目前主流的嵌入式微处理器系列主要有ARM系列、MIPS系列、PowerPC系列、Super H系列和X86系列等。 属于这些系列的嵌入式微处理器产品很多,有上千种以上。,Units (millions),Source: Andrew Allison, Inside The New Computer Industry, January 2001,Embedded RISC Processo

2、r Shipments,32位浪潮的到来,Source: Semico Research Corp. and SIA/WSTS,Total MCU, by Sub-Category (excl. DSP),Total Embedded Control Market Shipments by Type,总共约26亿个32位处理器 付运,占总数96亿的27%,2005年ARM为17亿个, 约占32位总量的70%左右,X86系列,主要由AMD,Intel,NS,ST等公司提供,如:Am186/88、Elan520、嵌入式K6,386EX、STPC等。 主要应用在工业控制、通信等领域。 国内由于对X8

3、6体系比较熟悉,得到广泛应用,特别是嵌入式PC的应用非常广泛。,MPC/PPC系列,Motorola推出的MPC系列,如MPC8XX。 IBM推出PPC系列,如PPC4XX。 主要应用在通信、消费电子及工业控制、军用装备等领域。,MPC/PPC系列,IBM PowerPC 集成10/100Mbps以太网控制器、串行和并行端口、内存控制器以及其它外设的高性能嵌入式处理器。 Motorola MPC 高度综合的SOC设备,它结合了PPC微处理器核心的功能、通信处理器和单硅成分内的显示控制器。这个设备可以在大量的电子应用中使用,特别是在低能源、便携式、图象捕捉和个人通信设备。,技术,0.25,微米,

4、CMoS SA-12E,282 Dhrystone 2.1 MIPS 200MHz,375 Dhrystone 2.1 MIPS 266MHz,200/100/66/50 MHz,266/133/66/66 MHz,晶体数量,480,万,电源消耗,1.1,瓦,信号,I/O,300,温度范围,-40到80度,电源供应,2.5V (,逻辑电路,),3.3V (I/O),,支持,5V I/Os,456-Ball,Enhanced PBGA (35mm x 35mm),性能,频率,(CPU /,SDRAM /PCI /EBC),封装,PowerPC 405 GP技术规格,*Dhrystone是一个综合

5、性的基准测试程序,它是为了测试编译器和CPU处理整数指令和控制功能的有效性,人为地选择一些“典型指令综合起来形成的测试程序。,ARM系列,ARM(Advanced RISC Machine)公司是一家专门从事芯片IP设计与授权业务的英国公司,其产品有ARM内核以及各类外围接口。 ARM内核是一种32位RISC微处理器,具有功耗低、性价比高、代码密度高等三大特色。 目前,90%的移动电话、大量的游戏机、手持PC和机顶盒等都已采用了ARM处理器,许多一流的芯片厂商都是ARM的授权用户(Licensee),如Intel、Samsung、TI、Motorola、ST等,ARM已成为业界公认的嵌入式微处

6、理器标准。,ARM Family,ARM7 Family,ARM9 Family,ARM10 Family,ARM11 Family,150DMIPS,300 DMIPS,500 DMIPS,1000 DMIPS,ARM Cortex Family,ARM Architecture,当前的主流ARM处理器,ARM7 世界上最为广泛使用的 CPU 之一 100MHz ARM9 100-300MHz,1.7B ARM Powred shipment in year of 2005, 31% is ARM9 based.,ARM11 芯片已经面世,ARM11 300-700+ MHz SIMD 指令

7、扩展支持更丰富的多媒体应用 40家授权芯片公司,一些已开始量产,FOMA N902i First ARM11 based phone,OMAP2420,i.MX31/i.MX31L,目前最快的嵌入式处理器,最快的处理器提供超过2000 DMIPS 的性能 运行于 1GHz 频率 (90nm or 65nm 制造工艺) 功耗小于 300mW,ARM Cortex A8 Application Processor,Cortex-M3 实现 $1 ARM芯片,ARM Cortex Architecture Thumb-2 ISA 3 Stage Pipeline 1.22 DMIPS/MHz 30%

8、 over ARM7TDMI 33K gates 30% smaller than ARM7TDMI,Luminary Micro的Stellaris系列MCU产品售价仅1美元,ARM Cortex-M3 微控制器内核,专门针对MCU应用领域而设计,突出低成本、低功耗和高效率。,领先嵌入式处理器技术发展讨论,多处理器技术 单处理器技术的性能提升终有一天会遭遇瓶颈 对嵌入式系统而言,尤其要考虑付出的代价 把任务进行并行分解是理想的选择 ARM MPcore可以集成1-4个ARM11处理器 关键是要提供给软件开发者一个友好的编程界面 64位处理器? 哪儿是系统性能瓶颈? 是需要64位地址还是64位

9、数据? 嵌入式系统比PC有更好的条件来解决系统性能和带宽问题 PC系统在主板上,扩展系统带宽需要扩大每个组件的接口带宽 SoC只需扩展片内总线,非常容易实现 AMBA支持8-1024位总线宽度 许多SoC设计以及ARM处理器内部已经使用64位数据总线,如何选择嵌入式微处理器,微处理器内核的选择 有无MMU OS的考虑 系统的工作频率 芯片存储器的容量 片内外设的考虑 实际应用的要求 接口时序,Outline,2、ARM体系结构,3、ARM编程模型 工作状态 CPU工作模式 寄存器组织 异常 内存与IO,1、嵌入式微处理器,图2.1.1 ARM体系结构方框图,ARM处理器的分类,结构体系版本(A

10、rchitecture) ARM v4T ARM v5TE ARM v6 ARM Cortex (v7),Processor Family ARM7 ARM9 ARM10 ARM11 ARM Cortex,按应用特征分类 应用处理器 Application Processor 实时控制处理器 Real-time Controller 微控制器 Micro-controller,特征:MMU, Cache 最快频率、最高性能、合理功耗,特征:MPU, Cache 实时响应、合理性能、较低功耗,特征:no sub-memory system 一般性能、最低成本、极低功耗,ARM体系结构的命名规则,

11、ARMXyzTDMIEJF-S x系列 y存储管理/保护单元 zCache TThumb16位译码器 DJTAG调试器 M快速乘法器 I嵌入式跟踪宏单元 E增强DSP指令 JJazelle F向量浮点单元 S可综合版本,以源代码形式提供的ARM核,Roadmap of ARM V4/V5/V6,ARM V4,ARMV4是目前支持的最老的架构,是基于32-bit地址空间的32-bit指令集。ARMv4除了支持ARMv3的指令外还扩展了: 支持halfword的存取 支持byte和halfword的符号扩展读 支持Thumb指令 提供Thumb和Normal状态的转换指令 进一步的明确了会引起Un

12、defined异常的指令 对以前的26bits体系结构的CPU不再兼容,ARMv4T,ARMv4T增加了16-bit Thumb指令集,这样使得编译器能产生紧凑代码(相对于32-bit代码,内存能节省到35%以上)并保持32-bit系统的好处。 Thumb在处理器中仍然要扩展为标准的32位ARM指令来运行。用户采用16位Thumb指令集最大的好处就是可以获得更高的代码密度和降低功耗。,ARM V5TE,1999年推出ARMv5TE其增强了Thumb体系,增强的Thumb体系增加了一个新的指令同时改进了Thumb/ARM相互作用、编译能力和混合及匹配ARM与Thumb例程,以更好地平衡代码空间和

13、性能 并在ARM ISA上扩展了增强的DSP指令集: 增强的DSP指令包括支持饱和算术(saturated arithmetic), 并且针对Audio DSP应用提高了70%性能。E扩展表示在通用的CPU上提供DSP能力。,ARMv5TEJ,2000年推出ARMv5TEJ,增加了Jazelle扩展以支持Java加速技术。 Jazelle技术比仅仅基于软件的JVM性能提高近8倍的性能减少了80的功耗。,ARMv6,2001年推出ARMv6,它在许多方面做了改进如内存系统、异常处理和较好地支持多处理器。 SIMD扩展使得广大的软件应用如Video和Audio codec的性能提高了4倍。 Thu

14、mb-2和TrustZone 技术也用于ARMv6中。ARMv6第一个实现是2002年春推出的ARM1136J(F)-STM处理器,2003年又推出了ARM1156T2(F)-S和ARM1176JZ(F)-S处理器。,ARMv7,ARMv7定义了3种不同的处理器配置(processor profiles): Profile A是面向复杂、基于虚拟内存的OS和应用的 Profile R是针对实时系统的 Profile M是针对低成本应用的优化的微控制器的。 所有ARMv7 profiles实现Thumb-2技术,同时还包括了NEON技术的扩展提高DSP和多媒体处理吞吐量400,并提供浮点支持以满

15、足下一代3D图形和游戏以及传统嵌入式控制应用的需要。,ARM7TDMI,Thumb 架构扩展, 提供两个独立的指令集: ARM 指令,均为 32位 Thumb指令,均为 16位 两种运行状态,用来选择哪个指令集被执行,内核具有Debug扩展结构,增强乘法器 (32x8) 支持64位结果,EmbeddedICE 逻辑,3 级流水线 冯诺依曼架构 CPI(Cycle Per Instruction) 约为1.9,图2.2.3 ARM720T内核结构,图2.2.1 ARM7TDMI内核结构,ARM7TDMI指令流水线,为增加处理器指令流的速度,ARM7 系列使用3级流水线。 允许多个操作同时处理,而

16、非顺序执行。 PC指向正被取指的指令,而非正在执行的指令。,从存储器中读取指令,解码指令中用到的寄存器,寄存器读(从寄存器Bank) 移位及ALU操作 寄存器写(到寄存器Bank ),PCPC,PC - 4PC-2,PC - 8PC - 4,ARMThumb,ARM7TDMI指令流水线,操作,周期,1 2 3 45 6,Fetch,最佳流水线,该例中用6个时钟周期执行了6条指令所有的操作都在寄存器中(单周期执行)指令周期数 (CPI) = 1,ARM9TDMI,Harvard架构 增加了可用的存储器宽度 指令存储器接口 数据存储器接口 可以实现对指令和数据存储器的同时访问 5 级流水线 实现了

17、以下改进: 改进 CPI 到 1.5 提高了最大时钟频率,ARM9TDMI,Instruction Fetch,Shift + ALU,Memory Access,Reg Write,Reg Read,Reg Decode,FETCH,DECODE,EXECUTE,MEMORY,WRITE,ARM9TDMI,ARM or ThumbInst Decode,Reg Select,Reg Read,Shift,ALU,Reg Write,ThumbARMdecompress,ARM decode,Instruction Fetch,FETCH,DECODE,EXECUTE,ARM7TDMI,流水线

18、,ARM9TDMI,ARM9TDMI,D Cache,I Cache,MMU,GLUE,外部 存储器,ARM940T 2x 4K caches MPU 写缓冲,ARM9xxT,ARM920T 2x 16K caches MMU 支持虚拟地址和内存保护 写缓冲,带Cache的ARM9TDMI,图2.2.4 ARM920T内核结构,ARM9E-S 系列概述,ARM9E 基于 ARM9TDMI 内核,有以下扩展和增强 单周期 32x16 乘法器 EmbeddedICE 逻辑 RT 改进的 ARM/Thumb 交互操作 新的32x16和 16x16 乘法指令 新的计数到零指令 新的饱和算术指令 ARM

19、946E-S ARM9E-S 内核 指令和数据cache, 大小可选择 指令和数据RAM,大小可选择 保护单元 AHB 总线接口 ARM966E-S 与 ARM946E-S相似, 但无 cache,ARM926EJ-S系列概述,Jazelle状态允许直接执行Java 8位码 ARM926EJ-S ARM9E-S 内核 可配置的cache和 TCM 内存管理单元 双重 32位 AHB 总线接口 (多层),ARM10E 系列概述,v5TE架构,CPI 1.3,6 级流水线,静态分支预测,32kB 指令cache和32kB数据cache 支持“Hit under miss” 非阻塞的执行单元,每周期

20、64 位的 LDM / STM操作,EmbeddedICE逻辑 - RT-II,支持新的 VFPv1 结构,同ARM1020E,除了cache大小为16kB,对SUDL(single user design license )有效,ARM1020E,ARM1022E,ARM9 vs ARM10,流水线的对比,Intel StrongARM 概述,ARM V4 架构 (无Thumb支持) 5级流水线,降低跳转损耗-stage pipeline,reduced branch penalty 改进的乘法器(典型地比ARM9TDMI 快2个周期) 不支持 Multi-ICE 调试 (JTAG限制在连通

21、性测试) 无外部协处理器接口 SA-110: 16K 指令和数据 caches, 8 x 16 字节写缓冲. SA-1100/1110: 片上外设,存储器控制器 更小的 cache 容量 PID 寄存器(作控制用) 指令断点,通过 CP15,Intel XScale 概述,V5TE 兼容架构 7-8级流水线带统计分支预测 32k的数据和指令 Cache, 外加2k的数据Minicache 8口写缓冲,4口填充和追加缓冲 完整的32位协处理器接口 调试和性能监控逻辑(通过CP14 ) 乘-加模块(作为CP0 ) 可配置的内核时钟速度100-733MHz ,来自 33-66MHz 输入时钟 异步输

22、入总线时钟可到100 MHz (最大总线内核时钟的1/3 ),Outline,2、ARM体系结构,3、ARM编程模型 工作状态 CPU工作模式 寄存器组织 异常 内存与IO,1、嵌入式微处理器,ARM微处理器:编程模型,处理器工作状态 CPU工作模式 寄存器组织 异常 内存与IO,ARM微处理器:处理器工作状态(PROCESSOR OPERATING STATES),处理器有两种工作状态: ARM:32位,执行字对准的ARM指令 Thumb:16位,执行半字对准的Thumb指令 ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容,ARM微处理器:处理器工作状态,进入Thumb状态

23、: 执行BX指令,并设置操作数寄存器的状态(位0)为1。 在Thumb状态进入异常(IRQ, FIQ, UNDEF, ABORT,SWI etc.),当异常处理返回时自动转换到Thumb状态 进入ARM状态: 执行BX指令,并设置操作数寄存器的状态(位0)为0。 进入异常时,将PC放入异常模式链接寄存器中,从异常向量地址开始执行也可进入ARM状态,ARM微处理器:处理器工作状态,Thumb-2:增加了混合模式能力 定义了一个新的32-bit指令集能在传统的16-bit指令运行的Thumb状态下同时运行。 这样能在一个系统中更好地平衡ARM和Thumb代码的能力,使系统能更好地利用ARM级别的性

24、能和Thumb代码的密度的优势,ARM微处理器:存储器格式,ARM 的寻址空间是线性的地址空间,为232=4G Bytes 0 to 3 存储第一个word, bytes 4 to 7存储第二个word ARM支持大端(Big-endian)和小端(Little-endian)的内存数据方式,可以通过硬件的方式设置(没有提供软件的方式)端模式,ARM微处理器:存储器格式,大端的数据存放格式,低地址,高地址,地址A,地址A+1,地址A+2,地址A+3,最高有效字节的地址就是该word的地址,最高有效字节位于最低地址,word a=0 x f6 73 4b cd,f6,73,4b,cd,ARM微处

25、理器:存储器格式,小端的数据格式,低地址,高地址,地址A,地址A+1,地址A+2,地址A+3,最低有效字节的地址就是该word的地址,最低有效字节位于最低地址,word a=0 x f6 73 4b cd,f6,73,4b,cd,ARM微处理器:存储器格式,大端: 小端:,0 xb3204500,0 xddddddd0,0 xb3204500,0 xddddddd0,f6,f6,73,73,4b,4b,cd,cd,00,00,da,da,实例 变量A:word A=0 x f6 73 4b cd,在内存中的起始地址为0 x b3 20 45 00 变量B:half word B=218,在内存

26、中的起始地址为0 x dd dd dd d0,问题:half word B=218与word C=218在内存中的存放方式有何不同?请分大端和小端两种情况说明。,ARM微处理器:编程模型,数据类型的约定 字节型数据(Byte):数据宽度为8bits 半字数据类型(HalfWord):数据宽度为16bits,存取式必须以2字节对齐的方式 字数据类型(Word):数据宽度为32bits,存取式必须以4字节对齐的方式,ARM微处理器:CPU模式(processor mode),7种CPU模式,CPU模式的转变: 软件控制 异常 外部中断,ARM微处理器:CPU模式,User模式,程序不能访问有些受保

27、护的资源,只能通过异常的形式来改变CPU的当前运行模式,特权模式可以存取系统中的任何资源,System模式,与User模式的运行环境一样 但是它可以不受任何限制的访问任何资源 该模式主要用于运行系统中的一些特权任务,FIQ模式,IRQ模式,Supervisor模式,Abort模式,Undefined模式,异常模式:主要是在外部中断或者程序执行非法操作时会触发,ARM微处理器:寄存器组织,ARM处理器有37个寄存器 31个通用寄存器:程序计数器、堆栈及其他通用寄存器 6个状态寄存器 这些寄存器不能同时看到,同时只有17个 不同的处理器状态和工作模式确定哪些寄存器是对编程者是可见的,ARM微处理器

28、: ARM State寄存器,ARM微处理器: Thumb State寄存器,低寄存器,高寄存器,ARM State 与Thumb State寄存器关系,ARM状态各模式下的寄存器,ARM状态各模式下的寄存器,所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。,ARM状态各模式下可以访问的寄存器,一般的通用寄存器,在汇编语言中寄存器R0R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。,一般的通用寄存器,其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物

29、理寄存器。,一般的通用寄存器,寄存器R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器,一般的通用寄存器,寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。,一般的通用寄存器,寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。,堆栈指针寄存器R13(SP),寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样

30、使用。但是在Thumb指令集中存在使用R13的指令。,链接寄存器R14(LR),R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,程序计数器R15(PC),寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。,ARM微处理器:通用寄存器,R15 用作程序计数器(PC),可以被读写 ARM state

31、: bits 1:0为0,bits31:2即为 PC. THUMB state:bit 0为0,bits31:1即为 PC,ARM微处理器:程序状态寄存器,CPSR(当前程序状态寄存器)在所有的模式下都是可以读写的,它主要包含: 条件标志 中断使能标志 当前处理器的模式 其它的一些状态和控制标志,ARM微处理器:程序状态寄存器,置0表示执行32bit的ARM指令 置1表示执行16bit的Thumb指令,Negative,Zero,Carry,Overflow,IRQ中断的响应: 置1:禁止响应 置0:允许响应,FIQ中断的响应: 置1:禁止响应 置0:允许响应,ARM微处理器:程序状态寄存器,

32、模式控制位M0-M4,ARM微处理器:异常,异常是由内部或者外部原因引起的,当异常发生时CPU将暂停执行当前指令自动到指定的向量地址读取指令并且执行。 在X86上,当有异常发生时CPU是到指定的向量地址读取要执行的程序的地址 而ARM是到向量地址的地方读取指令,也就是ARM的向量地址处存放的是一条指令(一般是一条跳转指令),ARM微处理器:异常,ARM CPU将引起异常的类型分为7种,ARM微处理器:异常,当异常出现时,异常模式分组的R14和SPSR用于保存状态,即: R14_=return link SPSR_=CPSR CPSR4:0=exception mode number CPSR5

33、=0 /*在ARM状态执行*/ if=Reset or FIQ then CPSR6=1 /*禁止快速中断*/ CPSR7=1 /*禁止正常中断*/ PC=exception vector address 当处理异常返回时,将SPSR传送到CPSR,R14传送到PC,异常的优先级,异常向量,85,Vector Table,异常处理,当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_ 设置适当的 CPSR 位: 改变处理器状态进入 ARM 态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如需要) 保存返回地址到 LR_ 设置 PC 为相应的异常向量 返回时,

34、异常处理需要: 从 SPSR_恢复CPSR 从LR_恢复PC Note:这些操作只能在 ARM 态执行.,Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devices,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,进入异常的操作,R14_=Return Link SPSR_=CPSR CPSR4:0=Exception Mode Number CPSR5=0 ;当运行于

35、ARM状态时 IF=Reset or FIQ then ;当响应FIQ异常时,禁止新的FIQ异常 CPSR6=1; CPSR7=1; PC=Exception Vector Address,当异常结束时,异常处理程序必须: 1.将LR( R14 )中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同; 2.将SPSR的值复制回CPSR; 3.清零在入口置位的中断禁止标志。 注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。,退出异常,例子: 用户模式到 FIQ模式*,r14_fiq,r13_fiq,r12_fiq,r10_fiq,r11_fiq,r9_fiq,r8_fiq,

36、用户模式 CPSR 复制到 FIQ 模式 SPSR,返回一个从用户模式计算的地址,PC值存储在FIQ模式,用户模式,FIQ 模式,图示进入异常过程,1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;,2. 用户程序运行时发生IRQ中断,硬件完成以下动作:,置位I位(禁止IRQ中断) 清零T位(进入ARM状态) 设置MOD位,切换处理器模式至IRQ模式,将下一条指令的地址存入IRQ模式的LR寄存器,将CPSR寄存器内容存入IRQ模式的SPSR寄存器,将跳转地址存入PC,实现跳转,BackAddr,JumpAddr,“?”表示对该位不关心,在异常处理结束后,异常处理程序完成以下动作:,图示退出异

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论