书签 分享 收藏 举报 版权申诉 / 77
上传文档赚钱

类型嵌入式系统软件开发基础课件.pptx

  • 上传人(卖家):三亚风情
  • 文档编号:2505563
  • 上传时间:2022-04-27
  • 格式:PPTX
  • 页数:77
  • 大小:1.90MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《嵌入式系统软件开发基础课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    嵌入式 系统软件 开发 基础 课件
    资源描述:

    1、第3章 嵌入式系统软件开发基础3.1 嵌入式系统软件组成3.2 嵌入式系统软件开发方法3.3 嵌入式系统软件开发主要内容3.4 嵌入式系统软件调试方法.3.5 嵌入式软件集成开发环境3.6 嵌入式软件开发语言第3章 嵌入式系统的设计方法2典型嵌入式系统组成处理器处理器MMUMMUGPIOGPIOUSBUSBLCDLCDCANCANDMADMA以太网以太网LCD/LCD/触摸屏触摸屏/ /鼠标鼠标FlashFlashSDRAMSDRAMSRAMSRAM看门狗看门狗复位电路复位电路电源管理电源管理驱动层驱动层OSOS应用应用BSP/driver/HALBSP/driver/HALLinuxLinu

    2、x、u/COSu/COS、WinceWince文件系统文件系统/GUI/API/GUI/API软件软件硬件硬件输入输入输出输出第3章 嵌入式系统的设计方法33.1 嵌入式软件组成nBSPnBootloadern操作系统内核n文件系统n库,应用软件第3章 嵌入式系统的设计方法43.2 嵌入式系统软件开发方法 采用宿主机/目标机交叉开发方式嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的。嵌入式软件以宿主机/目标机模式开发,所需要的开发环境称为交叉开发环境,分为宿主机部分和目标机部分,两者以统一的通信协议进行通信,宿主机向目标机发送命令,目标机接收、执行

    3、命令并将结果返回宿主机,从而实现两机之间的交互控制。第3章 嵌入式系统的设计方法53.3 嵌入式系统软件设计和调试流程n编辑q创建工程q添加文件、编写程序q汇编语言加C语言n编译q配置编译、汇编和连接参数q编写连接脚本文件q编译第3章 嵌入式系统的设计方法6n调试q连接调试器q下载程序q运行、调试n固化q通过仿真器烧写flashq专用或通用的编程器q通过bootloader烧写flash第3章 嵌入式系统的设计方法73.4 嵌入式软件开发主要内容n无操作系统的软件开发主要包括两部分q启动代码q应用程序n基于操作系统的软件开发包括:qBootloader开发q操作系统开发移植qBSP板级支持包开

    4、发移植q应用程发开发移植第3章 嵌入式系统的设计方法8无操作系统软件开发-启动代码开发启动代码功能和特征n功能q硬件初始化q引导C代码n特征q通常用汇编语言编写q程序复位运行入口点q代码量非常小第3章 嵌入式系统的设计方法9无操作系统软件开发-启动代码n启动代码程序流程q设置中断、异常入口q关中断q硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)q初始化栈指针q数据区初始化qC入口函数调用 BL Main第3章 嵌入式系统的设计方法10无操作系统软件开发-应用软件开发应用软件功能和特征n功能q硬件驱动q应用n特征q通常用C语言或者嵌入式汇编语言编写q程序较复杂,代码量较大第3章 嵌入式系

    5、统的设计方法11基于操作系统的软件开发-bootloader开发Bootloader功能和特征n功能q硬件初始化q引导操作系统q下载程序(串口、网口、USB)q烧写flashn特征q程序复位运行入口点q通常用汇编语言+C语言编写q代码量较小(相对)第3章 嵌入式系统的设计方法12基于操作系统的软件开发-嵌入式操作系统移植nLinuxnWindows CE nuC/OS IInuClinuxnNucleus第3章 嵌入式系统的设计方法13基于操作系统的软件开发-BSP设计nBSP功能和特征n功能q为应用程序提供统一的硬件操作接口n特征q高度硬件相关q高度依赖于具体硬件平台q各种操作系统各异第3章

    6、 嵌入式系统的设计方法14基于操作系统的软件开发-应用程序设计应用程序功能n功能qGUI图形、人机交互q控制q算法n特征q硬件依赖程度小q部分可仿真调试q各种操作系统各异第3章 嵌入式系统的设计方法153.5 嵌入式软件调试技术n1模拟器方式 n2在线仿真器方式n3.监控器方式n4.在线调试器方式第3章 嵌入式系统的设计方法161模拟器方式n调试工具和待调试的嵌入式软件都在主机上运行,通过软件手段模拟执行为某种嵌入式处理器编写的源程序。简单的模拟器可以通过指令解释方式逐条执行源程序,分配虚拟存储空间和外设,进行语法和逻辑上的调试。第3章 嵌入式系统的设计方法172在线仿真器方式n在线仿真器IC

    7、E是一种完全仿造调试目标CPU设计的仪器,目标系统对用户来说是完全透明的、可控的。仿真器与目标板通过仿真头连接,与主机有串口、并口、以太网口或USB口等连接方式。该仿真器可以真正地运行所有的CPU动作,并且可以在其使用的内存中设置非常多的硬件中断点,可以实时查看所有需要的数据,从而给调试过程带来很多便利。由于仿真器自成体系,调试时可以连接目标板,也可以不接目标板。使用ICE同使用一般的目标硬件一样,只是在ICE上完成调试后,需要把调试好的程序重新下载到目标系统上而已。由于ICE价格昂贵,而且每种CPU都需要一种与之对应的ICE,使得开发成本非常高。 第3章 嵌入式系统的设计方法18主机和目标板

    8、通过某种接口(通常是串口)连接,主机上提供调试界面,被调试程序下载到目标板上运行监控程序是一段运行于目标机上的可执行程序,主要负责监控目标机上被调试程序的运行情况,与宿主机端的调试器一起完成对应用程序的调试。监控程序包含基本功能的启动代码,并完成必要的硬件初始化,等待宿主机的命令。被调试程序通过监控程序下载到目标机,就可以开始进行调试。监控器方式操作简单易行,功能强大,不需要专门的调试硬件,适用面广,能提高调试的效率,缩短产品的开发周期,降低开发成本。正因为以上原因,监控器方式才能够广泛应用于嵌入式系统的开发之中。监控器调试主要用于调试运行在目标机操作系统上的应用程序,不适宜用来调试目标操作系

    9、统。有的微处理器需要在目标板工作正常的前提下,事先烧制监控程序,而且功能有限,特别是硬件调试能力较差。3.监控器方式第3章 嵌入式系统的设计方法194.在线调试器方式 使用ICD和目标板的调试端口连接,发送调试命令和接收调试信息,可以完成必要的调试功能。一般情况下,在ARM芯片的开发板上采用JTAG边界扫描口进行调试。摩托罗拉公司采用专用的BDM调试接口。使用合适的开发工具可以利用这些接口。例如,ARM开发板,可以将JTAG调试器接在开发板的JTAG口上,通过JTAG口与ARM处理器核进行通信。由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此许多接口问题,如高频操作限制、

    10、电线长度的限制等被最小化了。该方式是目前采用最多的一种调试方式。 第3章 嵌入式系统的设计方法203.6 嵌入式系统软件开发工具nWindows操作系统qARM ADS/SDT + 调试器qGNU + Cygwin + 调试器qARM SDT + 简易电缆nLinux操作系统qGNU + GDB第3章 嵌入式系统的设计方法21开发环境的作用第3章 嵌入式系统的设计方法22ADS IDE(集成开发环境)n ARM应用软件的开发工具根据功能的不同,可以分为编辑软件、编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板,JTAG仿真器以及在线仿真器等。n目前有多家公司可以提供以

    11、上不同类型的开发工具,用户采用ARM处理器进行嵌入式系统开发时,选择合适的开发工具可以加快开发进度,节省开发成本。第3章 嵌入式系统的设计方法23ADS工具包的组成 nADS是ARM公司推出的集成开发工具包,是专门用于ARM相关应用开发和调试的综合性软件。目前常用的版本是1.2,在功能和易用性上比早期的SDT都有提高,是一款功能强大又易于使用的开发工具。nARM ADS包含有编译器、链接器、CodeWarrior IDE、调试器、指令集模拟器、ARM开发包和应用库等部分,可以用ADS来开发、编译、调试采用包括C、C+和ARM汇编语言编写的程序。 第3章 嵌入式系统的设计方法24ADS开发工具集

    12、 n1.1.命令行开发工具命令行开发工具ANSI C 编译器 - armcc and tccISO / Embedded C+ 编译器 - armcpp and tcppARM / Thumb 汇编器 armsLinker - armlink 第3章 嵌入式系统的设计方法25n2.2.图形开发工具:图形开发工具:Windows 集成开发环境 CodeWarriorDebugger AXD (ARM eXtended Debugger)narmsd ARM(符号调试器)可向前兼容n3.3.库文件:库文件:C and C+ 库n4.4.辅助工具辅助工具/ /支持软件:支持软件:格式转换器 - fr

    13、omelf 指令级仿真 ARMulator库管理器 armar第3章 嵌入式系统的设计方法26nfromELFfromELF:ARM映像文件转换工具该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件), Motorola 32-bit S-record format(Motorola 32位S格式映像文件), Intel Hex 32 format(Intel 32位格式映像文件),和 Verilog-like hex format(Verilog 16进制文件) 第3章 嵌入式系统的设计方法27nArmarArmar:AR

    14、M库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个ELF文件。nFlash downloaderFlash downloader:用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具nARMulatorARMulator: ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟,用户可以在硬件尚未做好的情况下,开发程序代码。第3章 嵌入式系统的设计方法28名称描述使用方式代码生成工具ARM汇编器ARM C/C+编译器Thumb C/C+编译器ARM 链接器由

    15、Code Warrior调用 集成开发环境Code Warrior工程管理,编译链接调试器AXD/ADW/ADU/armsd仿真调试指令模拟器ARMulator由AXD调用ARM开发包一些底层的例程,实用程序(如fromELF)由Code Warrior调用ARM应用库C/C+等函数库用户程序调用工具调用及流程工具调用及流程第3章 嵌入式系统的设计方法29集成开发环境CodeWarrior使用n CodeWarrior集成开发环境为管理和开发项目提供了简单、多样化的图形用户界面。n用户可以使用ADS的CodeWarrior IDE为ARM处理器开发用C,C+,或ARM汇编语言的程序代码 。n全

    16、面的项目管理功能。n 可以在CodeWarrior IDE为ARM配置以上所介绍的各种命令工具,实现对工程代码的编译,汇编和链接。第3章 嵌入式系统的设计方法30C/C+Browser C/C+SensitiveEditorProjectManager第3章 嵌入式系统的设计方法31建立工程建立工程第3章 嵌入式系统的设计方法32第3章 嵌入式系统的设计方法33uARM Executable Image:用于由ARM指令的代码生成一个 ELF格式的可执行映像文件。uARM Object Library:用于由ARM指令的代码生成一个 armar 格式的目标文件库。uEmpty Project:

    17、用于创建一个不包含任何库或源文件的工程。第3章 嵌入式系统的设计方法34uMakefile Importer Wizard: 用于将 Visual C 的 nmake 或 GNU make 文件转入到CodeWarrior IDE 工程文件。 uThumb ARM Interworking Image:用于由 ARM指令和 Thumb 指令的混和代码生成一个可执行的ELF格式的映像文件。 uThumb Executable image:用于由 Thumb指令创建一个可执行的ELF格式的映像文件。 uThumb Object Library:用于由Thumb指令的代码生成一个 armar 格式的

    18、目标文件库。第3章 嵌入式系统的设计方法35新建文件新建文件第3章 嵌入式系统的设计方法36添加文件到工程添加文件到工程第3章 嵌入式系统的设计方法37生成目标设置生成目标设置第3章 嵌入式系统的设计方法38n每个工程项目都有下面3种生成目标:uDebug:包含所有调试信息uDebugRel:包含部分调试信息uRelease:不包含调试信息n注:若项目编译只是为了调试使用,则选择Debug或者DebugRel;若要生成最后可以运行的文件,则最好选择Release。第3章 嵌入式系统的设计方法39编译链接编译链接n进入编译链接设置:第3章 嵌入式系统的设计方法40n设置窗口:第3章 嵌入式系统的

    19、设计方法41n目标设置:第3章 嵌入式系统的设计方法42n在Targets Settings选项组中,Post-Linker用于选择链接器输出文件的处理方式。用户可以选择的值如下:None:不进行连接的处理。ARM fromELF:使用ARM工具fromELF处理链接器输出的ELF格式文件,它可以将ELF格式的文件转换为各种二进制文件格式。Batch File Runner:在连接完成后运行一个DOS格式的批处理文件。第3章 嵌入式系统的设计方法43n若用户在编译完成后只是用AXD来调试程序,建议选择None;若要生成最后的编程文件,建议选择ARM fromELF,该选项与Linker面板中的

    20、ARM fromELF选项结合来产生最终的编程文件。第3章 嵌入式系统的设计方法44nCPU设置:第3章 嵌入式系统的设计方法45nLinker设置:第3章 嵌入式系统的设计方法46n在 Output format 下拉框中,为用户提供了多种可以转换的目标格式,这里选择 Plain binary,这是一个二进制格式的可执行文件,可以被烧写在目标板的 Flash中。n在 Output file name 文本域输入期望生成的输出文件存放的路径,或通过点击 Choose.按钮从文件对话框中选择输出文件路径。如果在这个文本域不输入路径名,则生成的二进制文件存放在工程所在的目录下。第3章 嵌入式系统的

    21、设计方法47第3章 嵌入式系统的设计方法48n在标签页 Output 中,Linktype 中提供了 3 种链接方式:Partia :表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple :默认的链接方式,也是使用最为频繁的链接方式,它链接生成简单的 ELF 格式的目标文件,使用的是链接器选项中指定的地址映射方式。Scattered :使得链接器要根据 scatter 格式文件中指定的地址映射,生成复杂的 ELF 格式的映像文件。一般情况下这个选项使用不太多。 第3章 嵌入式系统的设计方法49n 在选中 Simple 方式后,就会出现 Simp

    22、le image。 R0 Base:这个文本框设置包含有 R0 段的加载域和运行域为同一个地址,默认是 0 x8000。这里用户要根据硬件的实际 SDRAM 的地址空间来修改这个地址,保证在这里填写的地址是程序运行时 SDRAM 地址空间所能覆盖的地址。RW Base:这个文本框设置包含 RW 和 ZI 输出段的运行域地址。如果选中 split 选项,链接器生成的映像文件将包含 2 个加载域和 2 个运行域,此时,在 RW Base 中所输入的地址为包含 RW 和 ZI 输出段的域设置了加载域和运行域地址。 第3章 嵌入式系统的设计方法50第3章 嵌入式系统的设计方法51n 在 Options

    23、 选项中,需要注意的是 Image entry point 文本框。它指定映像文件的初始入口点地址值,当映像文件被加载程序加载时,加载程序会跳转到该地址处执行。如果需要,用户可以在这个文本框中输入下面格式的入口点。 n入口点地址:这是一个数值,例如-entry 0 x0。 n 符号:该选项指定映像文件的入口点为该符号所代表的地址处。比如:-entry int_handler。 n在此处指定的入口点用于设置 ELF 映像文件的入口地址。 需要注意的是,这 里不可以用符号 main 作为入口点地址符号,否则将会出现“Image dose not have an entry point(Not sp

    24、ecified or not set due to multiple choice)”的出错信息。 第3章 嵌入式系统的设计方法52n Layout选项在连接方式为Simple时有效,用来安排一些输入段在映像文件中的位置。在上图中,Place at Beginning of Image选项用于指定某个输入段放置在它所在的运行时域的开头。 第3章 嵌入式系统的设计方法53n编译链接:第3章 嵌入式系统的设计方法54第3章 嵌入式系统的设计方法55文件输出第3章 嵌入式系统的设计方法56AXD调试工具的使用n在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果

    25、,这可以由软件仿真来完成。n当然,也可以搭建一个PCB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。n只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。第3章 嵌入式系统的设计方法57n调试器能够发送以下指令:调试器能够发送以下指令:q装载映像文件到目标内存;q启动或停止程序的执行;q显示内存,寄存器或变量的值;q允许用户改变存储的变量值。第3章 嵌入式系统的设计方法58进入AXD调试工具第3章 嵌入式系统的设计方法59 在菜单File中选择“Load image”选项,打开 Load Image对话框,找到要装载的.axf映像

    26、文件,点击“打开”按钮,就把映像文件装载到目标内存中了。 第3章 嵌入式系统的设计方法60Docking windowsDocking toolbarsRegistersSource/Disassembly Memory 第3章 嵌入式系统的设计方法61n选择调试目标:选择调试目标:n 点击ADX窗口菜单【Options】选择【Configure Target】,即弹出Choose Target 窗口,在没有添加其它仿真驱动程序前,Target 项中只有两项,分别为ADP(JTAG 硬件仿真)和ARMUL(软件仿真)。第3章 嵌入式系统的设计方法62n调试工具条,从左到右依次为:调试工具条,从

    27、左到右依次为:全速运行(Go)停止运行(Stop)单步运行(Step In),与Step 命令不同之处在于对函数调用语句,Step In 命令将进入该函数。单步运行(Step),每次执行一条语句,这时函数调用将被作为一条语句执行。单步运行(Step Out),执行完当前被调用的函数,停止在函数调用的下一条语句。运行到光标(Run To Cursor),运行程序直到当前光标所在行时停止。设置断点(Toggle BreakPoint)第3章 嵌入式系统的设计方法63n调试观察窗口工具条,从左到右依次为:打开寄存器窗口(Processor Registers)打开观察窗口(Processor Wat

    28、ch)打开变量观察窗口(Context Variable)打开堆栈观察窗口(Back Trace)打开存储器观察窗口(Memory)打开反汇编窗口(Disassembly)第3章 嵌入式系统的设计方法64处理器状态观察:n包括:q寄存器q变量q存储器第3章 嵌入式系统的设计方法65存储器窗口:n包括:q显示格式q修改操作第3章 嵌入式系统的设计方法66单步执行、断点:第3章 嵌入式系统的设计方法67添加变量进行观察:第3章 嵌入式系统的设计方法68Wiggler JTAG Wiggler JTAG 仿真器的安装与应用仿真器的安装与应用n简介nH-JTAG调试代理n使用Wiggler JTAG

    29、Wiggler JTAG 仿真器第3章 嵌入式系统的设计方法69简介简介n MagicARM2410 实验箱配套的Wiggler JTAG 仿真器,支持ADS1.2 集成开发环境,支持单步、全速及断点等调试功能。仿真器采用ARM 公司提出的标准20 脚JTAG 仿真调试接口,与计算机连接采用标准25 针并口(即打印机口)。第3章 嵌入式系统的设计方法70u 要使用Wiggler JTAG 仿真器来调试ARM 处理器,除了ADS1.2 集成开发环境外,还需要安装一个ARM 调试代理软件;u 推荐使用H-JTAG 软件,H-JTAG 软件的特点如下:支持ARM7/ARM9,支持自动检测和手动指定内

    30、核;使用RDI 接口,支持SDT2.51、ADS1.2、REALVIEW 和IAR 集成开发环境;支持ARM/Thumb 模式;支持Little Endian & BIG Endian 模式;支持Wiggler、SDT JTAG 和自定义接口;H-JTAGH-JTAG调试代理调试代理第3章 嵌入式系统的设计方法71使用使用Wiggler JTAG Wiggler JTAG 仿真器仿真器n双击桌面“H-JTAG”快捷方式启动nH-JTAG 会自动检测ARM 内核,如果JTAG 连接正确将会在H-JTAG 主窗口中显示S3C2410A 处理器的内核ARM920Tn在进行JTAG 仿真调试时,不要关

    31、闭H-JTAG 软件第3章 嵌入式系统的设计方法72n 将计算机并口与Wiggler JTAG 仿真器连接;n 将仿真器JTAG口接头插入MagicARM2410实验箱主板的J29上;n 通过AXD 软件的设置即可进行JTAG仿真调试;第3章 嵌入式系统的设计方法73程序固化程序固化n 在JTAG 仿真调试通过后,要将程序调试生成十六进制文件并下载到外部的NOR Flash(即固化程序),才可脱机运行。生成HEX HEX 文件。使用Flash Programmer Flash Programmer 烧写FlashFlash。第3章 嵌入式系统的设计方法74生成生成HEX HEX 文件文件n 在

    32、当前工程窗口中选用Release 生成目标,打开工程的DebugRel Settings 窗口,在TargetSettings 项中设置Post-linker 选取ARM fromELF。n 在ARM formELF 项中设置输出文件类型,如设置为Intel 32 bit Hex,然后设置输出文件名。生成文件默认存放在当前工程的xxx_DataRelease”目录中。n 重新编译连接工程即可生成 十六进制文件。第3章 嵌入式系统的设计方法75使用使用Flash Programmer Flash Programmer 烧写烧写FlashFlashn 将MagicARM2410 MagicARM2

    33、410 实验箱主板上的JP8 JP8 跳线器断开,选用NOR Flash NOR Flash 启动方式,按RST RST 键复位系统n 将Wiggler JTAG 仿真器的25 针接口通过并口延长线与PC 机的并口LPT1 连接,将Wiggler JTAG 仿真器的20 针接口通过20 PIN 连接电缆接到MagicARM2410 实验箱主板的J29 上n 将配置文件DeviceARM2410.ocd 复制D:目录下。启动Flash Programmern 点击Program按钮,下载程序至目标板的Flash 中n 脱机运行第3章 嵌入式系统的设计方法763.8 嵌入式软件开发语言nC语言n汇编语言nJAVA语言,C+第3章 嵌入式系统的设计方法77一个困扰我的问题?nADS ,arm, Linux等相互之间什么关系?nADS集成开发环境能开发什么东西?它与我们后面所学的GNU开发工具有什么关系?

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:嵌入式系统软件开发基础课件.pptx
    链接地址:https://www.163wenku.com/p-2505563.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库