嵌入式微处理器体系结构复习资料_第1页
嵌入式微处理器体系结构复习资料_第2页
嵌入式微处理器体系结构复习资料_第3页
嵌入式微处理器体系结构复习资料_第4页
嵌入式微处理器体系结构复习资料_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、1、 嵌入式微处理器体系结构嵌入式微处理器的体系结构可以采用冯诺依曼体系结构或哈佛体系结构,指令系统可以选用精简指令系统risc和复杂指令集系统cisc。1、 冯诺依曼体系结构和哈佛体系结构;(1)冯诺依曼结构的计算机由cpu和存储器构成,其程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置;采用单一的地址及数据总线,程序指令和数据的宽度相同。程序计数器(pc)是cpu内部指示指令和数据的存储位置的寄存器。(2)哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址、独立访问。提高执行速度

2、,提高数据的吞吐率,具有较高的执行效率。2、cisc和risc类别 cisc risc指令系统指令数量很多 较少,通常少于100执行时间有些指令执行时间很长, 如整块的存储器内容拷贝; 或将多个寄存器的内容 拷贝到存贮器 没有较长执行时间的指令编码长度编码长度可变,1-15字节 编码长度固定,通常为4个字节寻址方式寻址方式多样 简单寻址操作 可以对存储器和寄存器 只能对寄存器对行算术和逻辑操作, 进行算术和逻辑操作 load/store体系结构编译 难以用优化编译器生成 高效的目标代码程序 采用优化编译技术,生成高效的目标代码程序 二、arm状态各模式下的寄存器1、所有的37个寄存器,分成两大

3、类: (1)31个通用32位寄存器; (2) 6个状态寄存器。 2、r0r7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。3、寄存器r8r14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器4、寄存器r8r12有两个分组的物理寄存器。一个用于除fiq模式之外的所有寄存器模式,另一个用于fiq模式。这样在发生fiq中断后,可以加速fiq的处理速度5、寄存器r13、r14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。3、 处理器工作模式1、 arm处理器有7

4、种工作模式; usr(用户模式):arm处理器正常程序执行模式。 fiq(快速中断模式):用于高速数据传输或通道处理 irq(外部中断模式):用于通用的中断处理 svc(管理模式):操作系统使用的保护模式 abt (数据访问终止模式): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 sys(系统模式): 运行具有特权的操作系统任务。 und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 arm微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。 除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(priv

5、ileged modes);其中除去用户模式和系统模式以外的5种又称为异常模式(exception modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。2、除用户模式外,其它模式均为特权模式。arm内部全部系统资源和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。3、此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。4、 arm异常处理1、当异常产生时, arm 核: (1)拷贝 cpsr 到 spsr_ (2)设置适当的 cpsr 位: a.改变处理器状态进入 arm 态 b.改变处理器模式进入相应的异常模式 c.设置中断禁止位禁

6、止相应中断 (如需要) (3)保存返回地址到 lr_ (4)设置 pc 为相应的异常向量地址2、返回时, 异常处理程序需要: (1)从 spsr_恢复cpsr (2)从lr_恢复pc (3)注意:这些操作只能在 arm 态执行.5、 arm指令集1、 arm寻址方式:掌握arm微处理器9种寻址方式的特点。 (1)寄存器寻址 操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。 例如指令: mov r1,r2 ;r1r2 sub r0,r1,r2 ;r0r1- r2(2)立即寻址 在立即寻址指令中数据就包含在指令当中,立即寻址指令的操

7、作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“”为前缀,表示16进制数值时以“0x”表示。 例如指令: add r0,r0,#1 ;r0r0 + 1 mov r0,#0xff00 ;r00xff00 (3)寄存器移位寻址 寄存器移位寻址是arm指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。 例如指令: mov r0,r2,lsl #3 ;r2的值左移3位,结果放入r0,即r0=r2 * 8 ands r1,r1,r2,lsl r3 ;r2的值左移r3位,然后和r1相与操作,结果放入r1可采用的移位

8、操作如下:lsl:逻辑左移(logical shift left),寄存器中字的低端空出的位补0。lsr:逻辑右移(logical shift right),寄存器中字的高端空出的位补0。asr:算术右移(arithmetic shift right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1ror:循环右移(rotate right),由字的低端移出的位填入字的高端空出的位rrx:带扩展的循环右移(rotate right extended by 1 place),操作数右移一位,高端空出的位用原c 标志值填充。 (4)寄存器间接寻址 指令中的地址码给

9、出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。 例如指令 :ldr r0,r1 ;r0r1(将r1中的数值作为地址,取出此地址中的数据保存在r0中)str r0,r1 ;r1 r0 (5)变址寻址 变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。例如指令: ldr r2,r3,#4 ;r2r3 + 4(将r3中的数值加4作为地址,取出此地址的 数值保存在r2 中) str r1,r0,#-2 ;r0-2 r1(

10、将r0中的数值减2作为地址,把r1中的内容保存到此地址位置) (6)多寄存器寻址(ldm/stm) ldm/stm指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是r0-r15这16个寄存器的子集或是所有寄存器。采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送,这种寻址方式用一条指令最多可以完成16个寄存器值的传送。 格式为: ldm(或stm)条件类型 基址寄存器!,寄存器列表 该指令的常见用途是将多个寄存器的内容入栈或出栈。(7)堆栈寻址 堆栈是一种数据结构,堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和

11、“先进后出”,堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。(8)块复制寻址 块复制寻址用于把一块从存储器的某一位置复制到另一位置,是一个多寄存器传送指令。(9)相对寻址 相对寻址是变址寻址的一种变通,由程序计数器pc提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。2、堆栈寻址满递增堆栈(fa):堆栈指针指向最后压入的数据,且由低地址向高地址生成。满递减堆栈(fd):堆栈指针指向最后压入的数据,且由高地址向低地址生成。空递增堆栈(ea):堆栈指针指向下一个将要放入数据的空位置,且由低地址向

12、高地址生成。空递减堆栈(ed):堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。3、多寄存器寻址(块拷贝寻址) (1)块拷贝寻址是多寄存器传送指令ldm/stm的寻址方式。ldm/stm指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是r0-r15这16个寄存器的子集或是所有寄存器。 (2)ldm/stm指令依据其后缀名的不同其寻址的方式也有很大不同。 (3)ldmia r1!,r0,r2,r3指令执行后,r1的值变为r1+12r1;注:!决定rn的值是否随着传送而改变寻址模式 描述 起始地址 结束地址 rn!i

13、a 执行后增加 rn rn+4*n rn+4*nib 执行前增加 rn+4 rn+4*n rn+4*nda 执行后减少 rn rn-4*n rn-4*ndb 执行前减少 rn-4 rn-4*n rn-4*n六arm状态与thumb状态 的转换1、实现arm工作状态转换的指令,其句法如下: bx 目标地址(1)bx指令将引起处理器转移到目标地址所指向的地址处执行。(2)目标地址的位0不用来作为地址的一部分。a.若目标地址的位0为1,则指令将cpsr中的标志t置位,且将目标地址的代码解释为thumb代码;b.若目标地址的位0为0,则指令将cpsr中的标志t复位,且将目标地址的代码解释为arm代码。

14、7、 arm的硬件系统结构1、s3c2410的存储器系统(1)s3c2410支持大、小端模式,可通过软件选择大小端模式;(2)存储空间分成8个bank,每个bank 128mbytes,总共 1gb; 6个bank用于控制 rom, sram, etc. 剩余的2个bank用于控制 rom, sram, sdram, etc .(3)除 bank0 (16/32-bit) 外,所有的bank都可以通过编程选择总线宽度= (8/16/32-bit) ;(4)7个bank固定起始地址,最后一个bank可调整起始地址;(5)最后两个bank大小可编程(6)所有bank存储周期可编程控制;(7)如果同

15、时使用bank6/ bank7,则要求连接相同容量的存储器,而且其地址空间在物理上是连续的。2、s3c2410的i/o口配置 s3c2410有117个多功能口,掌握如何通过软件编程对每个i/o口进行配置。如将端口c的最低2为设置为01,既设置成输出模式,其余位不变。 rgpccon = rgpccon&0xfffffffc|0x00000001; rgpcdat= rgpcdat |0x001; /pc0口电平输出高 表3.4.3 s3c2410a的端口c i/o口配置情况端口c可选择的引脚端功能gpc15gpc8输入/输出vd7 vd0gpc7gpc5输入/输出lcdvf2lcdvf0gpc

16、4输入/输出vmgpc3输入/输出vframegpc2输入/输出vlinegpc1输入/输出vclkgpc0输入/输出lend寄存器地址 读/写 描述 复位值gpccon 0x56000020 r/w 配置端口c引脚端,使用位31:0,分别对端口b的16个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留0x0 gpcdat 0x56000024 r/w 端口c数据寄存器,使用位15:0 未定义gpcup 0x56000028 r/w 端口c上拉电阻不使能寄存器,使用位15:0 。0:使能;1:不使能0x0 保留0x5600002c 保留未定义 表 端口c控制寄存器3、掌握ar

17、m微处理器的中断系统的特点 了解:一旦有中断发生,arm的中断系统将如何处理。 在arm系统中,支持复位、未定义指令、软中断、预取中止、数据中止、irq和fiq 7种异常,每种异常对应于不同的处理器模式,有对应的异常向量(固定的存储器地址)。在arm系统中,一旦有中断发生,正在执行的程序都会停下来,通常都会执行如下的中断步骤: (1)保存现场。保存当前的pc值到r14,保存当前的程序运行状态到spsr。 (2)模式切换。根据发生的中断类型,进入irq模式或fiq模式。 (3)获取中断服务子程序地址。pc指针跳到异常向量表所保存的irq或fiq地址处,irq或fiq的异常向量地址处一般保存的是中

18、断服务子程序的地址,pc指针跳入到中断服务子程序,进行中断处理。 (4)多个中断请求处理。在arm系统中,可以存在多个中断请求源,比如串口中断、ad中断、外部中断、定时器中断及dma中断等,所以可能出现多个中断源同时请求中断的情况。为了更好地区分各个中断源,通常为这些中断定义不同的优先级别,并为每一个中断设置一个中断标志位。当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别哪一个中断发生了,进而调用相应的函数进行中断处理。 (5)中断返回,恢复现场。当完成中断服务子程序后,将spsr中保存的程序运行状态恢复到cpsr中,r14中保存的被中断程序的地址恢复到pc中,继续执行被中断的程

19、序。4、 了解s3c2410的dma控制器的基本工作原理。dma(direct memory acess,直接存储器存取)方式是指存储器与外设在dma控制器的控制下,直接传送数据而不通过cpu,传输速率主要取决于存储器存取速度。在dma传输过程中,dma控制器负责管理整个操作,并且无须cpu介入,从而大大提高了cpu的工作效率。dma方式为高速i/o设备和存储器之间的批量数据交换提供了直接的传输通道。由于i/o设备直接同内存发生成块的数据交换,可以提高i/o效率。现在大部分计算机系统均采用dma技术。许多输入输出设备的控制器都支持dma方式。采用dma方式进行数据传输的具体过程如下。(1) 外

20、设向dma控制器发出dma请求。(2) dma控制器向cpu发出总线请求信号。(3)cpu执行完现行的总线周期后,向dma控制器发出响应请求的回答信号。(4)cpu将控制总线、地址总线及数据总线让出,由dma控制器进行控制。(5)dma控制器向外部设备发出dma请求回答信号。(6)进行dma传送。(7)数据传送完毕,dma控制器通过中断请求线发出中断信号。cpu在接收到中断信号后,转人中断处理程序进行后续处理。(8)中断处理结束后,cpu返回到被中断的程序继续执行。cpu重新获得总线控制权。每个dma控制器可以处理以下4种情况: (1)源和目的都在系统总线上; (2)源在系统总线上,目的在外围

21、总线上; (3)源在外围总线上,目的在系统总线上; (4)源和目的都在外围总线上。5、嵌入式存储系统的特点。(1)高速缓冲存储器原理及特点。高速缓冲存储器(cache)用来提高存储器系统的性能,许多微处理器体系结构都把它作为其定义的一部分。cache能够减少内存平均访问时间。cache可以分为统一cache和独立的数据程序cache。(2) 存储器管理单元mmu主要完成的功能。 (1)虚拟存储空间到物理存储空间的映射。采用了页式虚拟存储管理,它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。mmu实现的就是从虚拟地址到物理地址的转换。 (2)存储器

22、访问权限的控制。 (3)设置虚拟存储空间的缓冲的特性。8、 嵌入式系统i/o设备接口1、掌握s3c2410的i/o接口的编程要求:掌握i/o口编程,能编写实现led1、 led2 、 led3、 led4 轮流闪烁的程序。 实现led1和led2轮流闪烁的程序代码 void main(void) int flag,i; target init();/进行硬件初始化操作,包括对io口的初始化操作 for(;) if(flag = = 0) for(i = 0;i 1000000;i+); /延时 rgpgcon rgpgcon0xfff0ffff | 0x00050000;/配置第8、第 /9位

23、为输出引脚 rgpgdat rgpgdat0xeff | 0x200; /第8位输出为低电平 /第9位输出高电平 for(i = 0;i 10000000;i+); /延时 flag = 1; else for(i = 0;i 1000000;i+); /延时 rgpgconrgpgcon0xfff0ffff(0x00050000;/配置第8、 /第9位为输出引脚 rgpgdatrgpgdatoxdff | 0x100;/第8位输出为高电平 /第9位输出低电平 for(i = 0;i 1000000;i+); /延时 flag = 0; 2、掌握s3c2410的a/d转换器接口的原理要求:掌握

24、a/d转换器接口的原理,能编写a/d转换器初始化函数和获取a/d的转换值的程序。 (1)a/d转换器(模数转换器)完成电模拟量到数字量的转换。实现a/d转换的方法很多,常用的方法有计数法、双积分法和逐次逼近法等。(2)对a/d转换器进行初始化程序中的参数ch表示所选择的通道号,程序如下: void ad_init (unsigned char ch) radcdly=100; /adc启动或间隔延时 radctsc=0; /选择adc模式 radccon=(114)|(496)|(ch3)|(02)|(07) return 0; /通道不能大于7 for(i=0; i 16; i+) /为转换

25、准确,转换16次 radccon |=0x1; /启动a/d转换 radccon= radccon0xffc7 |(ch 4); /为转换准确,除以16取均值3、 掌握四线式电阻式触摸屏的工作原理,能分析触摸点的x轴坐标和y轴坐标是如何测量出来的。触摸屏按其工作原理可分为矢量压力传感式、电阻式、电容式、红外线式和表面声波式5类。在嵌入式系统中常用的是电阻式触摸屏。四线式触摸屏的x工作面和y工作面分别加在两个导电层上,共有4根引出线:x、x,y、y分别连到触摸屏的x电极对和y电极对上。四线电阻屏触摸寿命小于100万次。当给x方向的电极对施加一确定的电压,而y方向电极对不加电压时,在x平行电压场中

26、,触点处的电压值可以在y(或y)电极上反映出来,通过测量y电极对地的电压大小,通过a/d转换,便可得知触点的x坐标值。同理,当给y电极对施加电压,而x电极对不加电压时,通过测量x电极的电压,通过a/d转换便可得知触点的y坐标。四线电阻触摸屏的分辨方法是将四线电阻触摸后变化的模拟量转换成数字量,经过软件计算得出不同的屏幕上不同的,坐标。此工作主要是靠s3c2440a 芯片中的模数转换器来实现的。4、 了解 s3c2410的uart串行接口的工作原理,掌握s3c2410的uart发送和接收数据的程序设计。uart(通用异步收发器)主要由数据线接口、控制逻辑、配置寄存器、波特率发生器、发送部分和接收

27、部分组成,采用异步串行通信方式,采用rs-232c 9芯接插件(db-9)连接,是广泛使用的串行数据传输方式. 本程序实例实现从uart0接收数据,然后分别从uart0和uart1发送出去。其功能可以把键盘敲击的字符通过pc机的串口发送给arm系统上的uart0,arm系统上的uart0接收到字符后,再通过uart0和uart1送给pc机,这样就完成了串口间的收发数据。要实现以上数据的收发功能,需要编写的主要代码如下。(1)发送数据其中whichuart为全局变量,指示当前选择的uart通道,使用串口发送一个字节的代码如下: void uart_sendbyte(int data) if(wh

28、ichuart= =0) if(data= =n) while(!(rutrstat00x2); delay(10); /延时,与终端速度有关 wrutxh(r); while(!(rutrstat00x2); /等待,直到发送状态就绪 delay(10); wrutxh0(data); else if(whichuart= =1) if(data=n) while(!(rutrstat10x2); delay(10); /延时,与终端速度有关 rutxh1=r; while(!(rutrstat10x2); /等待,直到发送状态就绪 delay(10); rutxh1data; else i

29、f(whichuart= =2) if (data= =n) while(!(rutrstat20x2); delay(10); /延时,与终端速度有关 rutxh2r; while(!(rutrstat20x2); /等待,直到发送状态就绪 delay(10); rutxh2data; (2)接收数据如果没有接收到字符则返回0。使用串口接收一个字符的代码如下: char uart_getkey(void) if(whichuart0) if(rutrstat00x1) /uarto接收到数据 return rdurxh0(); else return 0; else if(whichuart

30、= =1) if(rutrstat10x1) /uart1接收到数据 return rdurxh1(); else return 0; else if(whichuart= =2) if(rutrstat20x1) /uart2接收到数据 return rdurxh2(); else return 0; else return 0; 5、掌握键盘接口设计的方法。 要求:掌握矩阵式键盘的扫描原理,能设计一个与s3c2410连接的4x4的矩阵式键盘的接口电路 ,并编写键盘扫描程序。(1) 矩阵键盘的按键按n行m列排列,每个按键占据行列的一个交点,需要的i/o口数目是n+m,容许的最大按键数是nm。

31、矩阵键盘可以减少与微控制器i/o接口的连线数,是常用的一种键盘结构形式。根据矩阵键盘的识键和译键方法的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。(2) 一个用i/o口实现的键盘接口,为了识别键盘上的闭合键,常采用行扫描法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫描完全部的行线为止。(3) 根据行扫描法的原理,识别矩阵键盘按键闭合分两步进行: a.识别键盘哪一行的键被按下:让所有行线均为低电平,检查各列线电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明无键被按下。 b.如果

32、某列有键被按下,识别键盘哪一行的键被按下:逐行置低电平,并置其余各行为高电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此行此列交叉点处按键被按下。1.键盘控制初始化程序void keyboard_test(void) uint8t ucchar; uint8t szbuf40; uart_printf(“n keyboard test examplen”); uart_printf(“press any key to exitn”); keyboard_init(); g_nkeypress=0xfe; while(1) f_nkeypress=0; while(f_nkeypre

33、ss=0) if(uart_tetkey() /press any key from uart0 to exit return; else if(ucchar=7) /or press 5*4 key-7 to exit return; else if(g_nkeypress!=0xfe) /or sb1202/sb1203 to exit return; iic_read_keybd(0x70,0x1,&ucchar); /get data from zlg7290 if(ucchar!=0) ucchar-key_set(ucchar); /key map for edukit ii if

34、(ucchar16) sprintf(&szbuf,”press key %d”,ucchar); else if(ucchar255) sprintf(&szbuf,”press key %d”,ucchar); if(ucchar=0xff) sprintf(&szbuf,”press key %c”,ucchar); if(ucchar=0xff) sprintf(&szbuf,”press key fun”); #ifdef boardtest print_lcd(200,170,0x1c,&szbuf); #endif uart_printf(szbuf); uart_printf(

35、“n”) uart_printf(“end.n”);9、 嵌入式软件及操作系统1、 正确理解进程、线程的概念,掌握进程及进程的主要特点,并能说明进程和程序有什么区别。 (1) 进程(process)是在描述多道系统中并发活动过程引入的一个概念。进程和程序是两个既有联系又有区别的概念,两者不能混为一谈。而进程则是一次执行过程,它是暂时的,是动态地产生和终止的。 一个进程通常包含有以下几个方面的内容: 相应的程序;cpu上下文;一组系统资源。进程的特点:进程具有动态性;进程具有独立性;进程具有并发性。(2)线程(thread)是一个比进程更小的能独立运行的基本单位。所谓的线程,就是进程当中的一条执行流程。包括运行上下文、内存地址空间、打开的文件等。可以用线程来作为cpu的基本调度单位,使得各个线程之间可以并发执行。对于同一个进程当中的各个线程来说,运行在相同的资源平台上,可以共享该进程的大部分资源,但也有一小部分资源是不能共享的,每个线程都必须拥有各自独立的一份。2、 任务的实现(1)任务的层次

温馨提示

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

评论

0/150

提交评论