第10讲 驱动及操作系统.ppt

上传人:s****8 文档编号:93913672 上传时间:2023-07-17 格式:PPT 页数:30 大小:365.50KB
返回 下载 相关 举报
第10讲 驱动及操作系统.ppt_第1页
第1页 / 共30页
第10讲 驱动及操作系统.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《第10讲 驱动及操作系统.ppt》由会员分享,可在线阅读,更多相关《第10讲 驱动及操作系统.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、设备驱动设备驱动使用任何外部设备时都需要有相应驱动使用任何外部设备时都需要有相应驱动程序的支持。驱动程序为上层软件提供设程序的支持。驱动程序为上层软件提供设备的操作接口。对于上层软件而言,只需备的操作接口。对于上层软件而言,只需要调用驱动程序提供的接口,而不用理会要调用驱动程序提供的接口,而不用理会设备具体的内部操作。对于驱动程序而言,设备具体的内部操作。对于驱动程序而言,不仅要实现设备的基本功能函数,如初始不仅要实现设备的基本功能函数,如初始化、中断响应、发送、接收等,使设备的化、中断响应、发送、接收等,使设备的基本功能得以实现,而且针对设备使用过基本功能得以实现,而且针对设备使用过程中可能

2、出现的各种差错,还应提供完备程中可能出现的各种差错,还应提供完备的错误处理函数。的错误处理函数。驱动层软件有两个重要的概念:硬件抽象驱动层软件有两个重要的概念:硬件抽象层层(Hardware Abstraction Layer,HAL)和和板级支持包板级支持包(Board Support Package,BSP)。可以简单地理解为硬件抽象层与硬。可以简单地理解为硬件抽象层与硬件具有更加紧密的相关性,而板级支持包件具有更加紧密的相关性,而板级支持包与操作系统具有更加紧密的相关性。与操作系统具有更加紧密的相关性。具体地讲,硬件抽象层的目的是为了具体地讲,硬件抽象层的目的是为了将硬件抽象化,即通过程

3、序来控制诸如将硬件抽象化,即通过程序来控制诸如CPU、I/O、存储器等硬件的操作,从而使、存储器等硬件的操作,从而使得系统的设备驱动程序与硬件无关。得系统的设备驱动程序与硬件无关。设计板级支持包的目的主要是为驱动程序设计板级支持包的目的主要是为驱动程序提供访问硬件设备寄存器的函数包,从而提供访问硬件设备寄存器的函数包,从而实现对操作系统的支持。为保证与操作系实现对操作系统的支持。为保证与操作系统保持正确的接口,以便良好地支持操作统保持正确的接口,以便良好地支持操作系统,不同的操作系统应对应不同定义形系统,不同的操作系统应对应不同定义形式的板级支持包。在功能上,板级支持包式的板级支持包。在功能上

4、,板级支持包大体需要实现以下两方面的内容:大体需要实现以下两方面的内容:(1)在系统启动时,完成对硬件的初始在系统启动时,完成对硬件的初始化。化。(2)为驱动程序提供访问硬件的手段。为驱动程序提供访问硬件的手段。在为驱动程序提供访问硬件的手段时,在为驱动程序提供访问硬件的手段时,在为驱动程序提供访问硬件的手段时,在为驱动程序提供访问硬件的手段时,BSPBSP一般一般一般一般应完成以下工作:应完成以下工作:应完成以下工作:应完成以下工作:1)1)将驱动程序提供的将驱动程序提供的将驱动程序提供的将驱动程序提供的ISR(ISR(中断服务程序中断服务程序中断服务程序中断服务程序)挂挂挂挂载到中断向量表

5、上。载到中断向量表上。载到中断向量表上。载到中断向量表上。2)2)创建驱动程序初始化所需要的设备对象。创建驱动程序初始化所需要的设备对象。创建驱动程序初始化所需要的设备对象。创建驱动程序初始化所需要的设备对象。BSPBSP将硬件设备描述为一个数据结构。这个数据将硬件设备描述为一个数据结构。这个数据将硬件设备描述为一个数据结构。这个数据将硬件设备描述为一个数据结构。这个数据结构中包含这个硬件设备的一些重要参数,上层结构中包含这个硬件设备的一些重要参数,上层结构中包含这个硬件设备的一些重要参数,上层结构中包含这个硬件设备的一些重要参数,上层软件就可以直接访问这个数据结构。软件就可以直接访问这个数据

6、结构。软件就可以直接访问这个数据结构。软件就可以直接访问这个数据结构。3)3)为驱动程序提供访问硬件设备寄存器的函为驱动程序提供访问硬件设备寄存器的函为驱动程序提供访问硬件设备寄存器的函为驱动程序提供访问硬件设备寄存器的函数。数。数。数。4)为驱动程序提供可重用性措施,比如将为驱动程序提供可重用性措施,比如将与硬件关系紧密的处理部分在与硬件关系紧密的处理部分在BSP中完成,中完成,驱动程序直接调用驱动程序直接调用BSP提供的接口,这样提供的接口,这样驱动程序就与硬件无关。只要不同的硬件驱动程序就与硬件无关。只要不同的硬件系统的系统的BSP提供的接口相同,驱动程序就提供的接口相同,驱动程序就可在

7、不同的硬件系统上运行。可在不同的硬件系统上运行。4.3.3 A/D转换功能驱动实例ARM S3C440BX芯片自带一个路模芯片自带一个路模拟信号输入的拟信号输入的10位位A/D转换器,转换器,1.ADC(A/D Conversion)的引脚设置S3C440BX芯片与芯片与A/D功能有关的引脚功能有关的引脚如表如表4-6所示,所示,在电路中,对上述引脚需要按照图所示加在电路中,对上述引脚需要按照图所示加上电容。上电容。2.ADC2.ADC转换时间的计算转换时间的计算A/DA/D转换时间即完成一次转换时间即完成一次转换时间即完成一次转换时间即完成一次A/DA/D转换所需要转换所需要转换所需要转换所

8、需要的时间。如果系统时钟为的时间。如果系统时钟为的时间。如果系统时钟为的时间。如果系统时钟为66 MHz66 MHz且且且且ADCADC时钟时钟时钟时钟源的预分频值为源的预分频值为源的预分频值为源的预分频值为9 9,则,则,则,则1010位数字量的转换时间位数字量的转换时间位数字量的转换时间位数字量的转换时间为为为为3.ADC相关寄存器及其设置与与A/D转换相关的寄存器主要有如下转换相关的寄存器主要有如下三个:三个:(1)ADCPSR:采样预分频寄存器。:采样预分频寄存器。(2)ADCCON:采样控制寄存器。:采样控制寄存器。4.ADC驱动程序参考代码(1)(1)定义与定义与定义与定义与ADC

9、ADC相关的控制位。相关的控制位。相关的控制位。相关的控制位。#define ADCCON_FLAG#define ADCCON_FLAG0 x400 x40#define ADCCON_SLEEP#define ADCCON_SLEEP0 x200 x20#define ADCCON_ADIN0#define ADCCON_ADIN0(0 x02)(0 x02)#define ADCCON_ADIN1#define ADCCON_ADIN1(0 x12)(0 x12)#define ADCCON_ADIN2#define ADCCON_ADIN2(0 x22)(0 x22)#define A

10、DCCON_ADIN3#define ADCCON_ADIN3(0 x32)(0 x32)#define ADCCON_ADIN4#define ADCCON_ADIN4(0 x42)(0 x42)#define ADCCON_ADIN5#define ADCCON_ADIN5(0 x52)(0 x52)#define ADCCON_ADIN6#define ADCCON_ADIN6(0 x62)(0 x62)#define ADCCON_ADIN7#define ADCCON_ADIN7(0 x72)(0 x72)#define ADCCON_READ_START#define ADCCON

11、_READ_START0 x20 x2#define ADCCON_ENABLE_START#define ADCCON_ENABLE_START0 x10 x1 嵌入式操作系统概述嵌入式操作系统概述 嵌入式实时操作系统嵌入式实时操作系统嵌入式实时操作系统嵌入式实时操作系统大多数嵌入式系统应用在实时环境中,并且大多数嵌入式系统应用在实时环境中,并且大多数嵌入式系统应用在实时环境中,并且大多数嵌入式系统应用在实时环境中,并且随着嵌入式系统的广泛应用,实时系统和嵌入式随着嵌入式系统的广泛应用,实时系统和嵌入式随着嵌入式系统的广泛应用,实时系统和嵌入式随着嵌入式系统的广泛应用,实时系统和嵌入式系统已

12、经密切联系在一起了。一般地,嵌入式操系统已经密切联系在一起了。一般地,嵌入式操系统已经密切联系在一起了。一般地,嵌入式操系统已经密切联系在一起了。一般地,嵌入式操作系统是指支持嵌入式系统工作的操作系统,它作系统是指支持嵌入式系统工作的操作系统,它作系统是指支持嵌入式系统工作的操作系统,它作系统是指支持嵌入式系统工作的操作系统,它在知识体系和技术结构上与通用操作系统没有太在知识体系和技术结构上与通用操作系统没有太在知识体系和技术结构上与通用操作系统没有太在知识体系和技术结构上与通用操作系统没有太大区别。通用操作系统只注重平均性能,如对于大区别。通用操作系统只注重平均性能,如对于大区别。通用操作系

13、统只注重平均性能,如对于大区别。通用操作系统只注重平均性能,如对于整个系统来说,所有任务的平均响应时间是关键,整个系统来说,所有任务的平均响应时间是关键,整个系统来说,所有任务的平均响应时间是关键,整个系统来说,所有任务的平均响应时间是关键,并不关心单个任务的响应时间;而实时系统强调并不关心单个任务的响应时间;而实时系统强调并不关心单个任务的响应时间;而实时系统强调并不关心单个任务的响应时间;而实时系统强调的是实时性,即系统的正确性不仅依赖于计算结的是实时性,即系统的正确性不仅依赖于计算结的是实时性,即系统的正确性不仅依赖于计算结的是实时性,即系统的正确性不仅依赖于计算结果,也依赖于结果产生的

14、时间。因此,实时系统果,也依赖于结果产生的时间。因此,实时系统果,也依赖于结果产生的时间。因此,实时系统果,也依赖于结果产生的时间。因此,实时系统是指一个能够在指定的或者确定的时间内,实现是指一个能够在指定的或者确定的时间内,实现是指一个能够在指定的或者确定的时间内,实现是指一个能够在指定的或者确定的时间内,实现系统功能和对外部或内部、同步或异步事件作出系统功能和对外部或内部、同步或异步事件作出系统功能和对外部或内部、同步或异步事件作出系统功能和对外部或内部、同步或异步事件作出响应的系统。响应的系统。响应的系统。响应的系统。典型的嵌入式操作系统典型的嵌入式操作系统嵌入式嵌入式嵌入式嵌入式Lin

15、uxLinuxLinuxLinux是一种免费的、源代码完全开放的、符合是一种免费的、源代码完全开放的、符合是一种免费的、源代码完全开放的、符合是一种免费的、源代码完全开放的、符合POSIXPOSIX标准规范的操作系统。随着标准规范的操作系统。随着标准规范的操作系统。随着标准规范的操作系统。随着LinuxLinux的迅速的迅速的迅速的迅速发展,嵌入式发展,嵌入式发展,嵌入式发展,嵌入式LinuxLinux现在已经有许多版本,包括现在已经有许多版本,包括现在已经有许多版本,包括现在已经有许多版本,包括硬实时的嵌入式硬实时的嵌入式硬实时的嵌入式硬实时的嵌入式Linux(Linux(如新墨西哥工学院的

16、如新墨西哥工学院的如新墨西哥工学院的如新墨西哥工学院的RT-RT-LinuxLinux、堪萨斯大学的、堪萨斯大学的、堪萨斯大学的、堪萨斯大学的KURT-Linux)KURT-Linux)和一般的嵌和一般的嵌和一般的嵌和一般的嵌入式入式入式入式LinuxLinux版本版本版本版本(如如如如 CLinuxCLinux、PocketLinuxPocketLinux等等等等)。RT-LinuxRT-Linux把把把把LinuxLinux任务优先级设为最低,使得所任务优先级设为最低,使得所任务优先级设为最低,使得所任务优先级设为最低,使得所有实时任务的优先级都高于它,从而达到既兼容有实时任务的优先级都高

17、于它,从而达到既兼容有实时任务的优先级都高于它,从而达到既兼容有实时任务的优先级都高于它,从而达到既兼容通常的通常的通常的通常的LinuxLinux任务又保证强实时性能的目的。任务又保证强实时性能的目的。任务又保证强实时性能的目的。任务又保证强实时性能的目的。C/OS-C/OS-是一个完整的,源码公开的,是一个完整的,源码公开的,可移植、固化、裁剪的占先式实时多任务可移植、固化、裁剪的占先式实时多任务内核,主要面向中小型嵌入式系统,具有内核,主要面向中小型嵌入式系统,具有执行效率高、占用空间小、可移植性强、执行效率高、占用空间小、可移植性强、实时性能优良和可扩展性强等特点。实时性能优良和可扩展

18、性强等特点。5.3 操作系统的基本概念5.3.1 多进程和多线程多进程和多线程许多嵌入式系统并不是单纯地完成一许多嵌入式系统并不是单纯地完成一种功能。这些不同的任务构成了应答机系种功能。这些不同的任务构成了应答机系统功能的各个部分,为了完成多个任务而统功能的各个部分,为了完成多个任务而组织程序结构的需要,引入了进程的概念。组织程序结构的需要,引入了进程的概念。5.3.2 任务任务在实时应用程序的设计过程中,要考在实时应用程序的设计过程中,要考虑如何将应用功能合理地划分为多个任务,虑如何将应用功能合理地划分为多个任务,让每个任务完成一定的功能,成为整个应让每个任务完成一定的功能,成为整个应用的一

19、部分。每个任务都被赋予一定的优用的一部分。每个任务都被赋予一定的优先级,有自己的一套先级,有自己的一套CPU寄存器和栈空间寄存器和栈空间一般地,每一个任务都是一个无限的循环,可以一般地,每一个任务都是一个无限的循环,可以一般地,每一个任务都是一个无限的循环,可以一般地,每一个任务都是一个无限的循环,可以处在以下五种状态之一:处在以下五种状态之一:处在以下五种状态之一:处在以下五种状态之一:(1)(1)休眠态休眠态休眠态休眠态(Dormant)(Dormant):是指任务驻留在内存:是指任务驻留在内存:是指任务驻留在内存:是指任务驻留在内存的程序空间中,并未被多任务内核所调度。的程序空间中,并未

20、被多任务内核所调度。的程序空间中,并未被多任务内核所调度。的程序空间中,并未被多任务内核所调度。(2)(2)就绪态就绪态就绪态就绪态(Ready)(Ready):是指任务已经准备好,:是指任务已经准备好,:是指任务已经准备好,:是指任务已经准备好,可以运行,但是由于该任务的优先级比正在运行可以运行,但是由于该任务的优先级比正在运行可以运行,但是由于该任务的优先级比正在运行可以运行,但是由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。的任务的优先级低,还暂时不能运行。的任务的优先级低,还暂时不能运行。的任务的优先级低,还暂时不能运行。(3)(3)运行态运行态运行态运行态(Runni

21、ng)(Running):是指任务获得了:是指任务获得了:是指任务获得了:是指任务获得了CPUCPU的控制权,正在运行中。基于优先级调度的实时的控制权,正在运行中。基于优先级调度的实时的控制权,正在运行中。基于优先级调度的实时的控制权,正在运行中。基于优先级调度的实时内核总是让处于就绪态的优先级最高的任务运行。内核总是让处于就绪态的优先级最高的任务运行。内核总是让处于就绪态的优先级最高的任务运行。内核总是让处于就绪态的优先级最高的任务运行。(4)(4)挂起态挂起态挂起态挂起态(Pending)(Pending):也叫做等待事件态:也叫做等待事件态:也叫做等待事件态:也叫做等待事件态(waiti

22、ng)(waiting),是指任务在等待某一事件的发生,是指任务在等待某一事件的发生,是指任务在等待某一事件的发生,是指任务在等待某一事件的发生(如等如等如等如等待某外设的待某外设的待某外设的待某外设的I/OI/O操作、等待定时脉冲的到来、等操作、等待定时脉冲的到来、等操作、等待定时脉冲的到来、等操作、等待定时脉冲的到来、等待超时信号的到来以结束目前的等待,等等待超时信号的到来以结束目前的等待,等等待超时信号的到来以结束目前的等待,等等待超时信号的到来以结束目前的等待,等等)。正。正。正。正在运行的任务由于调用了延时函数或等待某事件在运行的任务由于调用了延时函数或等待某事件在运行的任务由于调用

23、了延时函数或等待某事件在运行的任务由于调用了延时函数或等待某事件发生而将自身挂起,就处于挂起态。发生而将自身挂起,就处于挂起态。发生而将自身挂起,就处于挂起态。发生而将自身挂起,就处于挂起态。(5)(5)被中断态被中断态被中断态被中断态(Interrupt)(Interrupt):是指发生中断时,:是指发生中断时,:是指发生中断时,:是指发生中断时,CPUCPU提供相应的中断服务,原来正在运行的任务提供相应的中断服务,原来正在运行的任务提供相应的中断服务,原来正在运行的任务提供相应的中断服务,原来正在运行的任务暂不能运行,而进入了被中断状态。暂不能运行,而进入了被中断状态。暂不能运行,而进入了

24、被中断状态。暂不能运行,而进入了被中断状态。5.3.3 5.3.3 任务切换任务切换任务切换任务切换任务切换任务切换任务切换任务切换(Context Switch)(Context Switch)是指是指是指是指CPUCPU寄存器内寄存器内寄存器内寄存器内容切换。当多任务内核决定运行另外的任务时,容切换。当多任务内核决定运行另外的任务时,容切换。当多任务内核决定运行另外的任务时,容切换。当多任务内核决定运行另外的任务时,它保存正在运行的任务的当前状态,即当前它保存正在运行的任务的当前状态,即当前它保存正在运行的任务的当前状态,即当前它保存正在运行的任务的当前状态,即当前CPUCPU寄存器中的全

25、部内容;内核将这些内容保存在该寄存器中的全部内容;内核将这些内容保存在该寄存器中的全部内容;内核将这些内容保存在该寄存器中的全部内容;内核将这些内容保存在该任务的当前状态保存区,也就是该任务自己的栈任务的当前状态保存区,也就是该任务自己的栈任务的当前状态保存区,也就是该任务自己的栈任务的当前状态保存区,也就是该任务自己的栈区之中区之中区之中区之中(这个过程称为这个过程称为这个过程称为这个过程称为“入栈入栈入栈入栈”)。入栈工作完成。入栈工作完成。入栈工作完成。入栈工作完成后,把将要运行的任务的当前状态从该任务的栈后,把将要运行的任务的当前状态从该任务的栈后,把将要运行的任务的当前状态从该任务的

26、栈后,把将要运行的任务的当前状态从该任务的栈中装入中装入中装入中装入CPUCPU寄存器寄存器寄存器寄存器(这个过程称为这个过程称为这个过程称为这个过程称为“出栈出栈出栈出栈”),并,并,并,并开始这个任务的运行。这样,就完成了一次任务开始这个任务的运行。这样,就完成了一次任务开始这个任务的运行。这样,就完成了一次任务开始这个任务的运行。这样,就完成了一次任务切换。切换。切换。切换。5.3.4 5.3.4 内核内核内核内核多任务系统中,内核负责管理各个任务,为多任务系统中,内核负责管理各个任务,为多任务系统中,内核负责管理各个任务,为多任务系统中,内核负责管理各个任务,为每个任务分配每个任务分配

27、每个任务分配每个任务分配CPUCPU的使用时间,并且负责任务间的使用时间,并且负责任务间的使用时间,并且负责任务间的使用时间,并且负责任务间的通信。内核提供的基本服务是任务切换,通过的通信。内核提供的基本服务是任务切换,通过的通信。内核提供的基本服务是任务切换,通过的通信。内核提供的基本服务是任务切换,通过提供必不可少的系统服务,诸如信号量管理、邮提供必不可少的系统服务,诸如信号量管理、邮提供必不可少的系统服务,诸如信号量管理、邮提供必不可少的系统服务,诸如信号量管理、邮箱、消息队列及时间延时等,使得对箱、消息队列及时间延时等,使得对箱、消息队列及时间延时等,使得对箱、消息队列及时间延时等,使

28、得对CPUCPU的利用的利用的利用的利用更为有效。此外,实时内核允许将应用程序划分更为有效。此外,实时内核允许将应用程序划分更为有效。此外,实时内核允许将应用程序划分更为有效。此外,实时内核允许将应用程序划分成若干个任务并对它们进行管理成若干个任务并对它们进行管理成若干个任务并对它们进行管理成若干个任务并对它们进行管理(如任务切换、调如任务切换、调如任务切换、调如任务切换、调度、任务间的同步和通信,等等度、任务间的同步和通信,等等度、任务间的同步和通信,等等度、任务间的同步和通信,等等),因而使用实时,因而使用实时,因而使用实时,因而使用实时内核可以大大简化应用系统的设计。内核可以大大简化应用

29、系统的设计。内核可以大大简化应用系统的设计。内核可以大大简化应用系统的设计。5.3.5 5.3.5 任务调度任务调度调度调度调度调度(Schedulers)(Schedulers)是内核的主要职责之一,就是内核的主要职责之一,就是内核的主要职责之一,就是内核的主要职责之一,就是决定该轮到哪个任务运行。任务调度器从当前是决定该轮到哪个任务运行。任务调度器从当前是决定该轮到哪个任务运行。任务调度器从当前是决定该轮到哪个任务运行。任务调度器从当前就绪的所有任务中依照任务调度算法选择一个最就绪的所有任务中依照任务调度算法选择一个最就绪的所有任务中依照任务调度算法选择一个最就绪的所有任务中依照任务调度算

30、法选择一个最符合算法要求的任务,使该任务获得符合算法要求的任务,使该任务获得符合算法要求的任务,使该任务获得符合算法要求的任务,使该任务获得CPUCPU的使用的使用的使用的使用权,从就绪态进入运行态。大多数实时内核都是权,从就绪态进入运行态。大多数实时内核都是权,从就绪态进入运行态。大多数实时内核都是权,从就绪态进入运行态。大多数实时内核都是基于优先级调度法的,即基于优先级调度法的,即基于优先级调度法的,即基于优先级调度法的,即CPUCPU总是让处于就绪态总是让处于就绪态总是让处于就绪态总是让处于就绪态的、优先级最高的任务先运行。但是,高优先级的、优先级最高的任务先运行。但是,高优先级的、优先

31、级最高的任务先运行。但是,高优先级的、优先级最高的任务先运行。但是,高优先级任务何时掌握任务何时掌握任务何时掌握任务何时掌握CPUCPU的使用权由使用的内核来决定。的使用权由使用的内核来决定。的使用权由使用的内核来决定。的使用权由使用的内核来决定。通常,基于优先级调度法的内核有两种:占先式通常,基于优先级调度法的内核有两种:占先式通常,基于优先级调度法的内核有两种:占先式通常,基于优先级调度法的内核有两种:占先式内核和非占先式内核。内核和非占先式内核。内核和非占先式内核。内核和非占先式内核。任务间的通信与同步任务间的通信与同步1任务间的通信任务间的通信多任务实时系统中,任务间或中断服多任务实时

32、系统中,任务间或中断服务与任务间常常需要交换信息,这种信息务与任务间常常需要交换信息,这种信息传递称为任务间的通信传递称为任务间的通信(inter task communication)。任务间的通信有两个途。任务间的通信有两个途径:共享数据结构和消息机制。径:共享数据结构和消息机制。1)共享数据结构共享数据结构实现任务间通信的最简单方法是使用实现任务间通信的最简单方法是使用共享数据结构,尤其是多个任务在同一地共享数据结构,尤其是多个任务在同一地址空间下的情形。共享数据结构的类型可址空间下的情形。共享数据结构的类型可以是全局变量、指针、缓冲区等。以是全局变量、指针、缓冲区等。2)消息机制消息机制任务间另一种通信方式是使用消息机任务间另一种通信方式是使用消息机制。任务可以通过内核提供的系统服务向制。任务可以通过内核提供的系统服务向另一个任务发送消息。消息机制包括消息另一个任务发送消息。消息机制包括消息邮箱和消息队列。邮箱和消息队列。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁