介绍微软Windows CE的实时系统_第1页
介绍微软Windows CE的实时系统_第2页
介绍微软Windows CE的实时系统_第3页
介绍微软Windows CE的实时系统_第4页
介绍微软Windows CE的实时系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

精品文档-下载后可编辑介绍微软WindowsCE的实时系统介绍MicrosoftWindowsCE

MicrosoftWindowsCE的快速反应的嵌入式应用常常被用来管理严格的时间反应。例如,制造过程控制,高速的数据采集设备,电讯交换设备,医用设备,空中“有线”控制,武器发射装备,空间航行和导航,实验室,实验控制,汽车发动机控制,机器人系统。

为保证这种功能,就意味着不仅需要计算性,还有结果的时间性,此种应用必须在指定的时间参数内做出反应。

实时系统的广义定义是“对任何外部刺激,计算机做出及时反应是至关重要的系统”,标准定义在Internetnewsgroupcorprealtimegroup中。实时定义为:一个实时系统它的计算正确性,不仅依靠于计算逻辑上的正确,还包括及时的产生结果。如果没有达到系统时间限制条件,系统也是失效的。

搞清楚实时系统和实时操作系统(RTOS)的区别至关重要。实时系统(Real-timeoperatingsystem,RTOS)的正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间。实时系统能够在指定或者确定的时间内完成系统功能和外部或内部、同步或异步时间做出响应的系统。因此实时系统应该在事先定义的时间范围内识别和处理离散事件的能力;系统能够处理和储存控制系统所需要的大量数据。而实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。实时系统代表所有系统组成设备——硬件,操作系统和应用——它需要达到系统的要求,实时操作系统(RTOS)只是整个实时系统的一个组成部分,它必须提供足够的功能以确保整个实时系统达到要求。

同样,搞清快速操作系统和实时操作系统之间区别,也很重要,对于一个RTOS虽然达到全面要求十分有用,但并不是它自己达到这种要求。Internetneusgronpcornp.realtime列举了作为一个实时操作系统,必须达到以下要求:OS(操作系统)必须是多线程和优先级之分,且必须支持线程优先级;必须存在一个优先级继承的系统;OS必须支持可预测的线程,同步发送机理;

另外,OS的行为必须是可预测的,这意味实时系统的开发者必须对系统中断级,系统调用和分时了如指掌:

必须知道OS和设备驱动器的中数据匹配时间。

设备驱动器用来处理一个中断时间和关于这些驱动器的中断申请信息必须清楚。

中断响应(从中断到运行时间),必须可预测并满足功能要求。

每次系统调用时间必须可以预测,并且独立于系统的对象数目。本篇论文论述了微软WindowsCE操作系统是如何达到一个实时系统的要求,更有意义的是,WindowsCE保证一个时间的上限,它在收到中断后开始一个实时的优先级线程。本论文论述了对特定参考平台的中数据响应时间,参考为有HinathiSH3的微处理器的“Odo”平台。

MicrosoftWindowsCE概论

WindowsCE作业系统是Windows家族中的成员,专门设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。WindowsCE被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统,WindowsCE可以通过设计一层位于内核和硬件之间代码来用设定硬件平台,这即是众所周知的硬件抽象层(HAL)(在以前解释时,这被称为OEMC(原始设备制造)适应层,即OAL;内核压缩层,即KAL。以免与微软的WindowsNT操作系统HAL混淆)。

不象其它的微软Windows操作系统,WindowsCE并不是代表一个标准的相同的对所有平台适用的软件。为了足够灵活以达到适应广泛产品需求,WindowsCE采用标准模式,这就意味着,它能够由一系列软件模式做出选择,从而使产品定制。另外,一些可利用模式也可作为其组成部分,这意味着这些模式能够通过从一套可利用的组份做出选择,从而成为标准模式,通过选择,能够达到系统要求的模式,OEM能够减少存储脚本和操作系统的运行。WindowsCE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivity)和伴侣(Companion);E代表电子产品(Electronics)。与Windows95/98、WindowsNT不同的是,WindowsCE是所有源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽于Windows95/98,但WindowsCE是基于WIN32API重新开发、新型的信息设备的平台。WindowsCE具有模块化、结构化和基于Win32应用程序接口和与处理器无关等特点。WindowsCE不仅继承了传统的Windows图形界面,并且在WindowsCE平台上可以使用Windows95/98上的编程工具(如VisualBasic、VisualC++等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简单的修改和移植就可以在WindowsCE平台上继续使用。WindowsCE并非是专为单一装置设计的,所以微软为旗下采用WindowsCE作业系统的产品大致分为三条产品线,PocketPC(掌上电脑)、HandheldPC(手持设备)及AutoPC。

WindowsCE关于VC5.0开发系统嵌入式工具包,提供系统库、工具、文本和样本代码,以使OEMS能够对特定的硬件平台使WindowsCE标准定制。嵌入式工具包也包括设备驱动包(DDK)和软件开发包(SDK),DDK提供了关于写驱动器的附加文本,SDK提供库、头文件、样本代码、文本以允许,开发者对基于WindowsCE的平台进行写操作。WindowsCE提供了相同的程序界面,以用来为其它的视窗操作系统开发功能,例如,WindowsCE版本1.01支持大约1000个微软的Win32API函数的其中500个。这就意味着大量不同类的工具,第三方书籍,关于Win32开发者训练教程,可以替代或为WindowsCE系统的开发者所用。

实时系统的开发者能够使用,关于VDFF5.0的嵌入式工具包,以把操作系统转移到特定的平台,并为这个平台开发附加设备驱动器和实时功能。

线程和线程优先权级

WindowsCE是有优先级的多任务操作系统,它允许多重功能、进程,在相同时间系统中运行WindowsCE支持的32位同步进程。一个进程包括一个或多个线程,每个线程代表进程的一个独立部分,一个线程被指定为进程的基本线程,进程也能创造一个未定数目的额外线程,额外线程实际数目,仅由可利用的系统资源限定。

WindowsCE利用基于优先级的时间片演算法以安排线程的执行,WindowsCE支持八个不同的优先级,由0到7,0代表,它在头文件Winbasw.h中定义。

优先级描述0关键进程所使用的优先级,是别,相当于Windows里的Ring01?线程优先级,比0级优先级低2高于通常的线程优先级,常为较底层的进程所使用3通常线程优先级,比较基础4低于常规线程优先级,有时候会被后台线程用到5?线程优先级6高于IDLE的线程优先级7级别的线程优先级

级别0和1通常做为实时过程和设备驱动器,级别2-4做为线程和通常功能,级别5-7做为是低于其它功能级别,注意级别6是目前状态并有稳定联接。

优先权的取决于线程优先级,拥有优先权的线程安排优先运行,同一优先级的线程,以循环优先先级方式运行,即每个线程接受定制的时间或时间片,定量时间默认值为25毫秒(WindowsCE2.0支持在MIPS平台更改定量时间)。较低优先权的线程,要直到较线程完成之后再运行,也即直到他们或者放弃或停止。一个重要的例外是优先级的线程(级别0,关键时间优先级)不与其它的线程共享时间片,这些线程连续执行直到他们完成。不象其它的微软窗操作系统,WindowsCE是固定不能改变,它不匹配基于这引进优先级的中断,他们能够暂时改动,但仅能通过WindowsCE内核以避免所谓的的“优先权倒置”。

优先权倒置指的是当它们同时竞争同一资源时,低优先级的线程,阻碍了高优先权线程对资源的利用。为了改正这种局面并解放较高优先权的线程,WindowsCE允许低级优先权继承,严格的线程优先权,并且运行较高优先级直到它释放所用资源。

例如,如果一个线程在优先权运行试图莸取由低级优先权占有的互斥体,低级优先权的线程变成优先权,并且运行直到它释放互斥体。优先权倒置适用于系统的所有线程。例如,甚至在优先级别1运行的内核线程能转成级别0,如果优先级0线程运行内存分页代码,将引起块失误。

基于优先级的多任务设计,保证运行在级的线程在一个预所知时间段执行。本论文在后面讨论设定响应,对于指定的平台和公式,并由其它的平台获取数字。在DAK和SDK的工具,显示了线程状态和优先级别,并描绘指定实时系统操作轮廓。

线程同步

实时系统必须保证进程和线程同步,例如,如果实时应用的一部分在另一部分获得多当前数据前即完成,此应用的管理进程可能不稳定,同步将确保在应用线程间交换正确。

如同其它的Windows操作系统一样,WindowsCE为线程同步提供了一个丰富的“等待对象”,这包括关键部门、事件、互斥体,些等待对象,允许一个线程减缓它的运行并且等待直到指定事件发生。

WindowsCE将互斥体、关键部分、事件请求按“先入先出,优先级(FIFO)”顺序排列:不同的先入先出顺序序列定义成八个不同的优先级,在给定的优称级的线程请求,将被放在优先级列表末尾,当优先级倒置出现时,调度程序调整这些序列。

除了等待对象,WindowsCE支持标准的Win32时间API函数,这些来自内核的应用,软件中断将获得时间间隔,它被用来管理实时应用。通过调用GetTickCont函数,它能够返回几毫秒,线程能够使用系统间隔时间。关于更详细的分时信息,WindowsCE内核也支持Win32API函数QueryPerformanreCounter和QueryPerFormanteFrequency。OEM必须为这些调用提供硬件和软件支持,它提供一个较高的时间分辨力和OAL界面其它方面。

其它方面考虑

WindowsCE提供了一个重要的存储系统,例如,当目前某些运行WindowsCE的平台提供4MB的物理内存,WindowsCE支持一个重要的2GB的地址空间,每个进程联接在它自己的32MB物理空间上,当它需要产生内存分页中断(这可能影响线程执行时间),物理内存进行线程代码或数据内存分页。

内存分页输入输出,将比实时进程优先级低。在实时进程中内存分页仍可自由出现,但这要确保后台的实际内存管理赢得实时系统优先权。

实时线程应该锁存在内存中,以防止这些无关紧要的内存分页阻碍其运行,它们可能会占用实际内存管理系统。

WindowsCE允许映射,这将阴止多个进程共享同一物理内存,结果将会导致协同进程间或驱动器与映射快速的数据传送,内存映射能够戏剧性的增强实时操作。

中断处理:IRQSISRS和ISTS

实时应用被设立在指定的时间间隔内,对外部事件做出反应,实时应用使用中断做为一种确保外部事件由操作系统获知的方式。在Windows中,内核和OEM适应层(OAL)被设定成使系统其它部分的中断和调度化。WindowsCE平衡操作,并通过把中断过程分成两部分而使执行更加容易:它分为中断服务程序(ISR)和中断服务线程(IST)两部分。

每条硬件中断申请线(IRQ),与一个ISR相连。当中断成立和中断出现时,内核为此调用寄存的ISR,ISR为中断处理的内核模式部分尽可能短的保存。它首先将内核放在适合的IST上。

ISR执行它的处理并返回一个ID号到内核,内核检查返回的中断ID号,并设置相关事件,中断服务线程等待事件。当内核设置事件时,IST停止等待并开始执行,附加的中断进程,中断处理大部分实际上出现在IST中,两个的线程优先权(级别0和1),通常指定为ISTS,保证这些线程运行得足够快。

正如前面所说,处在的ISTS不能被其它的线程占用,这些线程持续执行直到它们截止或放弃。

WindowsCE不能支持群体中断,这就意味着当以前一个中断处理中,另一个不同接受服务,也就是当内核位于ISR时如果中断出现,在为新的IRQ开始ISR前它将一直执行直到ISR结束,这将引起硬件中断和ISR开始之间的延迟,拖延和响应时间中断响应。

中断响应

本论文中,IntervuptLatency词组主要指的是较件中断,处理响应,也即是从处部中断到达处理器到中断开始处理间的时间。

WindowsCE中断响应时间是针对锁存在内存上的线程(当内存响应不存在时)。这使得计算差事件响应成为可能——中断服务程序(ISR)开始和中断服务线程(IST)开始D的总时间,直到中断处理的总时间能够通ISR和IST中所需时间计算决定。

ISR响应通用公式定义如下:

ISR开始时间=value1dISR_Currentsum(dISR_Higher)

value1=由内核处理过程获得响应值

dISR_Current=中断到达时程序中ISR持续时间。这个值范围由0到系统中长的ISR持续时间

sum(dISR_Higher)=所有在ISR开始前的较ISRS持续时间总和,即在时间vahe1dISR-cumeneu间到达的中断

例如,考虑一个拥有关键优先权ISR的嵌入式系统,因为ISR被设成,这有样ISRSdISR-Higher值为0。当没有其它ISRS响应,在程序中,即为value1响应即为value1加系统中长ISR周期,当中断到达时,正是系统中长的ISR开始执行。

IST响应周期定义如下:

IST开始时间=value2sum(dIST)sum(dISR)

value2=由内核处理的响应值

sum(dIST)=所有的出现在ISR和IST,开始的优先级ISTS和线程上下文转换时间总和。

sum(dISR)=在中断(?)ISR和它的IST之间运行的其它ISRS持续时间总和。

简单的例子——具有一个关键级ISR和一个关键级线程(无其它0优先级的线程)的嵌入式系统——没有其它的ISTS能够在ISR和IST之间中断,然而在关键级的ISR和它相关的IST开始间其它的ISRS能被处理。

因为ISRS一旦能够获得,即可被处理,很容易想象成病态情况,涉及产生一个持续的ISRS流,从而产生不确定的推迟。IST的开始不可能出现,因为OEM对系统中的中断完成控制。因为OEM(原始设备制造商)为特定操作系统设计传统WindowsCE版本。OCM利用目标操作环境限制使系统设计化。

为减少响应时间,OEM控制ISR和IST处理时间中断优先级线程优先级。公式中的value1和walue2代表,WindowsCE内核中处理时间,这是OEM不能控制的目前的在分时,研究工作涉及这些确认值。

确保WindowsCE的实时操作

两种不同途径被用来确保WindowsCE操作:

由WindowsCE开发组进行内部的检查或分析内核代码,

OEM和ISV(独立软件销售商)利用一些将在未来的WindowsCE版本嵌入式工具包(forVCFT)提供工具来确保特定配置。

WindowsCE关于VC的嵌入工具包包括以下工具:

(一个对于分时研究的内核的工具版本和Intrtinrt.ext应用软件来观察,中断过程的、、平均时间。

微软也能开发其它的针对顾客需要的分时工具。

WindowsCE开发组,已经检查了内核代码以证实它能由差的情况时间表征,它是独立于系统对象数目的。

为了利用这个检查,内核被表征成一套KCALLS或系统调用,在内核关闭优先权是它们是内核程序,并且不允许其它的线程运行,差事件时间,此时,实时进程、标止运行,它能在内核中表征成差事件KCALL时间(注意:这些时间不影响ISRS,只影响线程,例如ISTS)。

开发组通过检查发现这没有非持久的循环在KCALLS,这意味着:并所有的KCALLS能够表示成单向分支,代码路径,并确保通过KCALL并独立于输入参数发现差事件时间成为可能。

查找实际的差事件时间包括使用Instrumentedkemal,这仅是一个内核版本,它在设定应用环境后编辑使用,KCALL_PROFICE=1,以保证额外的分时功能,这个instrumentedkemel与debugkemel不同,Instrumentted是为一个零售的内核使用,它用来获得分时值,这常对于装运产品常常讳之莫深,在retailkernal和instrumentedkernel区别是它的装备。

Instrumenttedkernel记录所有的KCALL时间,这些值,包括、和平均时间,并能够通过调用专用的API函数DumPkcallprofile打印到调试接口,Instrumentedkernel通常运行在强状态下,然后调用Dumpkcallprefile来获得时间。

中断测试应用软件Intrtime.exe,在WindowsCE标准版本收集中断分时延迟信息,应用软件在测试中控制系统时间。因此,当系统需要时间控制器时,是不合适使用的。例如,此应用程序不能与内核instrumented版本一起使用,因为它也需要时间控制。

在WindowsCE2版(Beta版)测试响应

Intertime应用软件在odoSH3参考平台上运行1000次中断测试,内部运行58.98Mhz,外部为14.745Mhz外部频率,这个测试在一个标准的H/PC配置,它包括WindowsCE所有模式和组合。仅有主操作系统进程进行(NK.exe,Filesys.exe,Gwes.exe,Device.EXE,Shell.EXE和Explover.EXE),在测试中无用户初始中断(触摸屏、键盘或其它应用),应用软件可下面的ISR和IST开始、和时间:

响应、值(1000次测试)

ISR开始1.3-7.5微秒

IST开始93-275微秒

大多数测试结果,分布在值数值附近,当测试ISR开始时间时,值1.3和1.6微秒,出现了293和549次,共占测试的84%,类似的超过90%的(1000次中923)start-of-IST测试出响应为102微秒或少一些。

Intertime应用软件也使用一个用户指定数目的系统对象来测试ISR和IST开始时间。虽然工作十分初级,但它验证了ISR开始时间与系统对象数目无关,测试设为1000次(除了特别更改)并且线程优先权为5或7。

ISR开始值后台线程、数目(每个线程一个事件)优先级

8.407

8.65(注:仅100次)7

9.010(注:仅100次)5

14.8105

19.2105

17.0107

12.8205

11.020(注:仅100次)7

10.0507

15.01005

15.61007

这数值不是系统对象数目的函数,不同的值可能由于中断出现时内核状态,开发组目前正在研究以鉴定ISR开始差时间值。

由这些结果向回推,假定ISR开始值代表情况。此时,dISR_Current和Sum(dISR_Htgbor)为0,的value1=ISR开始值=1.3微秒,类似的设定情况时,Sum(dIST)和Sum(dISR)为0,Value值=.IST开始值=93微秒,单从测验结果看,它是不能确定,valume1或value2值。

附加的分时信息能够由instrumentedkernel收集,对于一个差情况在IST开始前花费时间valume2,能由下列公式计算:

Value2=dkCalldNextThread

dKcall=.内核调用时间;当消除优先级时,花费在内核的一部分时间量。

DNextThread=Next.Thread内核调用时期。花费在IST中时间量。

实际上,在0级别线程调度要比NextThread调用快,但此公式能估计出上限。

下面表格显示了用instrumentedKernel进行初步测试时差事件结果,这些测试条件与Intrtime测试相同。

内核调用模型值(ad-hoc.testing)

时间值(所用内核调用)266微秒(Learecrite)

NextThread237微秒

总值503微秒

Instrumentedkernel显示这些条件下value2上限为500微秒。这个值为两个差事件总时间,远远超过了由Intritime应用程序得到的结果,也大于实际差事件时间。例如:通过Nextthread调度一个优先级为0的线程,不会导致差事件,这意味着500微秒是一个高于实际的差事件值的保守值。

IntertimeUtility对于从总体上观察差事件值十分有用,InstrumenttedKemel对于获得可能差事件的值,通过内核描绘出所有响应原因——一个IST在这些事件运行,但在内核非优先部分运行执行时,将受阻碍,系统的差事件响应可由每一部分的差事件总和计算。

注意本论文中所有测试结果均基于内部WindowsCE的beta版,目前存在的操作系统和应用将继续得到修正,并且进行附加测试以获得在不同操作条件下系统操作,这些数值将继续被更新并出版,以反思目前的操作系统版本。

WindowsCE的主要特色

增进工作的产能和效率通讯录,日历行程,工作管理,时钟,计算机,Windows档案总管可携式应用软体--MicrosoftPocketExcel与MicrosoftPocketWord控制台--管理控制WindowsCE与办公室PC的连结--在您的桌上型与可携式的办公室间转移资料与他人通讯--可透过电子邮件及红外线无线电通讯,与其他手携式设备交换资料利用可携式InternetExplorer遨游网络想要并使你的HPC达到的功用。

WindowsCE的使用从随时随地的使用电脑及口袋中藏着PC,到智慧型家电用品及丰富的多媒体家庭剧院,MicrosoftWindowsCE为工作、家庭及其间的任何一点开启了动态的、崭新的开发远景。这个模组化、可自订的作业系统将Windows平台延伸到桌面之外,到达更小、更机动性、更特别的装置之上,然而它的Windows血统则确保了它的相容性,并且支援了更广泛的开发基础。「MICROSOFTWINDOWSCE」揭露了革命性的系统架构,可以让身为开发者或科技的您,扩展消费者及工业电子上的新市场,其中包括了:

手握式PC手掌式PC车用电脑网络电视网络电话DVD及多媒体装置未公开及未发现的秘密!您也将会发现观念性的架构来帮助您来了解您的设计选择,并看到真实世界的范例,为您展现此一卓越作业系统的弹性及潜力。

在WinCE中创建自己的快捷方式

快捷方式或称(。lnk)文件是可以提供到其他文件链接的很小的文件,你可以使用。lnk文件指向位于Windows文件夹中的文件。

如果你不使用。lnk文件,你只能通过文件系统文件(。dat)在ROM之外制作Windows文件夹下的文件的完全复本。

以下步骤列出了如何创建一个桌面快捷方式。当你创建了这个文件以后,你需要把它加入到运行时的image里,在大多数情况下,你需要把这个文件复制到Windows系统以外的地方。

创建一个桌面快捷方式的方法如下:

1、从PlatformBuilder中的File菜单选择NewProjectorFile

2、在NewProjectorFile对话框中选择Files标签

3、选择TextFile类型

4、在Filename文本框中,输入FileName.lnk,其中FileName可根据需要输入,下同。这样,一个新文件就被创建并打开了

5、在FileName.lnk中,输入链接命令

.lnk文件是一个包含了命令行和被链接目标的文本文件,它有一个命令行长度部分和一个命令行。你也可以通过参数传递给被链接的目标,这是可选的。然而,如果快捷方式模块在Coredll中被替换了,那么这个行为也可能会被改变。

作为默认的,一个。lnk文件使用如下的格式。

[后面命令行和参数的ASCII字符串的长度]#[命令行[参数]]

举个例子,要能过两个参数运行你的MyApp.exe程序,一个MyApp.lnk文件内可包含这个语句:

40#\Windows\MyApp.exeparameter1parameter2

6、从File菜单中选择SaveAs

7、把这个文件保存在BSP的OAK部分以便于编译进操作系统image中。使用SaveAs对话框导航到%_WINCEROOT%\public\PlatformName\WindowsCEVersion\BSPName\OAK\Files并且选择Save

你已经创建了快捷方式文件,你现在可以通过编辑Project.bib把它加入到OS中,或者添加到你的平台组件树中。如果是前者,只需打开Project.bib文件并且在FILES段中加入如下一行代码:

MyApp.LNK$(_FLATREL

EASEDIR)\MyApp.LNKNKS

在这个例子中,MyApp.LNK被放入NK的内存块中,可选的参数S把它定义成系统文件属性。

总结

本文介绍微软WindowsCE内核设计以达到RT

温馨提示

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

评论

0/150

提交评论