版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验1任务的创建、删除、挂起、恢复实验学时: 2 实验地点: 二综x203 实验日期: 2013/12/13 一、实验目的1实验环境的建立2任务的接口函数的应用二、实验内容1设计一个只有一个任务Task1,当程序运行后任务的工作就是每秒在显示器上显示一个字符“M”。2 在任务Task1中在创建一个任务Task2 。当程序运行后,任务Task1的工作在显示器上显示一个字符“M”;Task2 则是在显示器上显示字符 “Y”。3. 要求任务Task2运行20次后,挂起任务Task1;任务Task2运行40次后,恢复任务Task1。4. 当任务Task1运行5次时,用函数OSSchedLock()对调
2、度器进行加锁;而当任务Task1运行到第10次时,再用函数OSSchedUnlock()对调度器进行解锁,并运行该程序。 5. 使任务Task1能删除任务Task2。 三、实验方法包括实验方法、原理、技术、方案等。四、实验步骤1将BC45文件夹拷贝到C分区根目录下。2将software文件夹拷贝到任意分区根目录下。3. 分别完成实验1、2、3、4、5五、实验结果1. DOS窗口每秒显示一个字符“M”。每行显示10个“M”字符,行与行的间隔是一行。按ESC键程序退出2. DOS窗口交替显示字符"M"和“Y”,每隔一秒显示一次。每行显示10个字符,行与行之间的间隔是一行。按ES
3、C键程序退出3. DOS窗口开始交替显示字符"M"和“Y”,显示20次以后,Task1挂起,只显示“Y”,当Task2运行40次以后,Task1恢复,然后开始Task1,Task2交替运行。4. DOS窗口开始交题显示字符"M"和“Y”,显示5次以后,Task1将任务调度器上锁,此时只有“M”打印,当Task1运行10次后,Task1,Task2开始交替运行。5. DOS窗口开始交替显示字符“M”和“Y”,显示10次后,只显示“Y”六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。1.程序:/* Exercise 2 - 1 * aut
4、hor: csu chenan* time: 2013 - 12 - 12*/#include "includes.h"#define TASK_STK_SIZE 256 OS_STK MyTaskStkTASK_STK_SIZE; INT16S key;INT8U x = 0, y = 0;void MyTask(void *pdata)#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0X08, OSTickISR);PC_SetTi
5、ckRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();for(;)if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata,DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void main(void)char * ch = "M"OSInit();PC_
6、DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSTaskCreate(MyTask, ch, &MyTaskStkTASK_STK_SIZE-1, 0);OSStart();2.程序源代码:/* Exercise 2 - 2* author: csu chenan* time: 2013 - 12 - 13*/#include "includes.h"#define My_TASK1_STK_SIZE 256 #define My
7、_TASK2_STK_SIZE 256OS_STK MyTask1StkMy_TASK1_STK_SIZE;OS_STK MyTask2StkMy_TASK2_STK_SIZE;INT16S key;INT8U x = 0, y = 0;void MyTask2(void *pdata)#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0x80, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRIT
8、ICAL();for(;)if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void MyTask1(void *pdata)#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifchar *ch = "Y"pda
9、ta = pdata;OS_ENTER_CRITICAL();PC_VectSet(0X08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask2, ch, &MyTask2StkMy_TASK2_STK_SIZE - 1, 1);for(;)if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x
10、+ 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void main(void)char * ch = "M"OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSTaskCreate(MyTask1, ch, &MyTask1StkMy_TASK1_STK_SIZE-1, 0);OSStart()
11、;3.程序:/* Exercise 2 - 3* author: csu chenan* time: 2013 - 12 - 13*/#include "includes.h"#define My_TASK1_STK_SIZE 256 #define My_TASK2_STK_SIZE 256OS_STK MyTask1StkMy_TASK1_STK_SIZE;OS_STK MyTask2StkMy_TASK2_STK_SIZE;INT16S key;INT8U x = 0, y = 0;INT16U cnt = 0;void MyTask2(void *pdata)#if
12、 OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;for(;) cnt += 1;if(cnt = 20) OSTaskSuspend(0);if(cnt = 40) OSTaskResume(0);if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OS
13、TimeDlyHMSM(0,0,1,0);void MyTask1(void *pdata) char * ch2 = "Y"#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0X08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask2, ch2, &MyTask2StkMy_TASK2_
14、STK_SIZE-1, 1);for(;)if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();cnt +;OSTimeDlyHMSM(0,0,1,0);void main(void)char * ch = "M" OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, O
15、SCtxSw);PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSTaskCreate(MyTask1, ch, &MyTask1StkMy_TASK1_STK_SIZE-1, 0); OSStart();4.程序:/* Exercise 2 - 3* author: csu chenan* time: 2013 - 12 - 13*/#include "includes.h"#define My_TASK1_STK_SIZE 256 #define My_TASK2_STK_SIZE 256OS_STK MyTa
16、sk1StkMy_TASK1_STK_SIZE;OS_STK MyTask2StkMy_TASK2_STK_SIZE;INT16S key;INT8U x = 0, y = 0;INT16U cnt = 0;void MyTask2(void *pdata)#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;for(;)if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x
17、 + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void MyTask1(void *pdata) char * ch2 = "Y"#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0X08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();O
18、SStatInit();OSTaskCreate(MyTask2, ch2, &MyTask2StkMy_TASK2_STK_SIZE-1, 1);for(;) cnt = cnt + 1; if(cnt = 5) OSSchedLock(); else if(cnt=10) OSSchedUnlock(); if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key
19、 = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void main(void)char * ch = "M" OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSTaskCreate(MyTask1, ch, &MyTask1StkMy_TASK1_STK_SIZE-1, 0); OSStart();5.程序代码如下:/* Exercise 2 - 3* author
20、: csu chenan* time: 2013 - 12 - 13*/#include "includes.h"#define My_TASK1_STK_SIZE 256 #define My_TASK2_STK_SIZE 256OS_STK MyTask1StkMy_TASK1_STK_SIZE;OS_STK MyTask2StkMy_TASK2_STK_SIZE;INT16S key;INT8U x = 0, y = 0;INT16U cnt = 0;void MyTask2(void *pdata)#if OS_CRITICAL_METHOD = 3OS_CPU_S
21、R cpu_sr;#endifpdata = pdata;for(;) if(OSTaskDelReq(OS_PRIO_SELF) = OS_TASK_DEL_REQ) OSTaskDel(OS_PRIO_SELF); break; if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,
22、0);void MyTask1(void *pdata) char * ch2 = "Y"#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0X08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask2, ch2, &MyTask2StkMy_TASK2_STK_SIZE-1, 1);for
23、(;) cnt = cnt + 1; if(cnt = 10) while(OSTaskDelReq(0) != OS_TASK_NOT_EXIST) OSTimeDly(1); if(x > 10)x = 0;y = y + 2;PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK + DISP_FGND_WHITE);x = x + 1;if(PC_GetKey(&key) = 1)if(key = 0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,1,0);void main(void)char * ch
24、 = "M" OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSTaskCreate(MyTask1, ch, &MyTask1StkMy_TASK1_STK_SIZE-1, 0); OSStart();注:有程序的要求附上程序源代码,有图表的要有截图并有相应的文字说明和分析七、实验小结给出本次实验的体会,如学会了什么,遇到哪些问题,如何解决这些问题,存在哪些有待改进的地方。实验2时钟节拍及时间管理函数实验学
25、时: 2 实验地点: 综合实验楼x201 实验日期: 2013/12/15 一、实验目的1实验环境的建立2多任务环境下中断机制及时间API的应用二、实验内容1在OS_CPU_C.C文件中按如下代码定义函数OSTimeTickHook(),然后运行并查看运行结果。实现显示系统在每发生500次时钟中断期间,调度器进行任务调度的次数。2.设计一个有3个任务的应用程序。这3个任务分别是:MyTask、YouTask、和InterTask。其中任务InterTask是在时钟节拍中断服务程序中用钩子函数OSTimeTickHook()中断了10000次时使用一个信号变量InterKey激活的。运行并分析由
26、中断服务程序激活任务的工作特点。3. 设计一个应用,在任务MyTask中调用函数OSTimeDlyResume()取消任务YouTask的延时。为了观察任务YouTask的延时时间的变化,在钩子函数OSTimeTickHook()输出了任务YouTask在延时时间到时的时钟节拍数。 4. 设计一个应用程序,在任务中调用OSTimeGet()函数获得并显示系统的时钟节拍数OSTime。当任务运行10s时,调用函数OSTimeSet()将OSTime的值设为10。5. 在KEIL模拟开发环境下,将顺序执行的程序改为多任务运行,并跟踪程序或设置断点观察多任务系统执行流程。三、实验方法包括实验方法、原
27、理、技术、方案等。四、实验步骤1将BC45文件夹拷贝到C分区根目录下。2将software文件夹拷贝到任意分区根目录下。3. 安装KEIL2集成开发环境。4. 分别完成实验1、2、3、4、5五、实验结果记录实验输出数据和结果。1.2.3.4.5.六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。1.OS_CPU_C.c#if OS_CPU_HOOKS_EN > 0 INT16U d=0;INT16U d1=0;void OSTimeTickHook (void) char* s0 = "500" char* s1 = "Per"
28、char* s2 = "Times Interrupt Attemper Times" char s8; if(d = 500) PC_DispStr(14,4,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);PC_DispStr(18,4,s0,DISP_BGND_BLACK+DISP_FGND_WHITE);PC_DispStr(22,4,s2,DISP_BGND_BLACK+DISP_FGND_WHITE);sprintf(s,"%d",OSCtxSwCtr);PC_DispStr(31,d1+5,s,DISP_BGND_B
29、LACK+DISP_FGND_WHITE);d = 0;d1 += 1; d += 1;#endif#include "includes.h"#define TASK_STK_SIZE 512 OS_STK MyTaskStkTASK_STK_SIZE; INT16S key;INT8U x=0,y=0;void MyTask(void *data); void main (void) char* s_M="M" OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environ
30、ment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */ PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSTaskCreate(MyTask,s_M, &MyTaskStkTASK_STK_SIZE - 1, 0); OSStart(); /* Start multitasking */void MyTask(void *pdata)#if OS_CRITICAL_METHOD = 3
31、 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr;#endif pdata = pdata; /* Prevent compiler warning */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit(); for (;) if(x>10) x=0; y+=2; PC_DispChar(x,y,*(char*)pdata,DIS
32、P_BGND_BLACK+DISP_FGND_WHITE); x+=1; if(PC_GetKey(&key) = 1) if(key = 0x1B) PC_DOSReturn(); OSTimeDlyHMSM(0,0,1,0); 2.程序:OS_COPU_C.c#if OS_CPU_HOOKS_EN > 0 extern BOOLEAN InterKey;INT16U InterCtr = 0;void OSTimeTickHook (void) if(InterCtr = 10000) InterKey = 1; InterCtr+;#endifTest.c#include
33、"includes.h"#define TASK_STK_SIZE 512/任务堆栈长度OS_STK MyTaskStkTASK_STK_SIZE;/定义任务堆栈区OS_STK YouTaskStkTASK_STK_SIZE;/定义任务堆栈区OS_STK InterTaskStkTASK_STK_SIZE;/定义任务堆栈区INT16S key;/用于退出uCOS_II的键INT8U x=0,y=0;/字符显示位置BOOLEAN InterKey=FALSE;void MyTask(void *data);/声明任务void YouTask(void *data);/声明任务
34、void InterTask(void *data);/声明任务void main (void) char* s_M="M"/定义要显示的字符 OSInit( );/初始化uCOS_II PC_DOSSaveReturn( );/保存Dos环境 PC_VectSet(uCOS, OSCtxSw);/安装uCOS_II中断 PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSTaskCreate(MyTask,/创建任务MyTasks_M,/给任务传递参数&MyTaskStkTASK_STK_SIZE - 1,/设置
35、任务堆栈栈顶指针0/任务的优先级别为0); OSStart( );/启动多任务管理void MyTask (void *pdata) char* s_Y="Y"/定义要显示的字符char* s_H="H"#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL( ); PC_VectSet(0x08, OSTickISR);/安装时钟中断向量 PC_SetTickRate(OS_TICKS_PER_SEC);/设置时钟频率 OS_EXIT_CRI
36、TICAL( ); OSStatInit( );/初始化统计任务 OSTaskCreate(YouTask,/创建任务MyTasks_Y,/给任务传递参数&YouTaskStkTASK_STK_SIZE - 1,/设置任务堆栈栈顶指针1/ MyTask的优先级别为1);OSTaskCreate(InterTask,/创建任务MyTasks_H,/给任务传递参数&InterTaskStkTASK_STK_SIZE - 1,/设置任务堆栈栈顶指针2/ MyTask的优先级别为2); for (;) if (x>50) x=0; y+=2; PC_DispChar(x, y,/
37、字符的显示位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; /如果按下Esc键则退出uCOS_IIif (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSReturn( );/恢复Dos环境 OSTimeDlyHMSM(0, 0, 3, 0);/等待3秒void YouTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if (x>50)
38、 x=0; y+=2; PC_DispChar(x, y,/字符的显示位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0);/等待1秒 char*s="Running a task for interrupt demand: InterTask"void InterTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if(Int
39、erKey)if (x>50) x=0; y+=2; PC_DispChar(x, y,/字符的显示位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE );PC_DispStr(5,6,s,DISP_BGND_BLACK+DISP_FGND_WHITE); x += 1;InterKey=FALSE;/OSIntNesting-; OSTimeDlyHMSM(0, 0, 1, 0);/等待1秒 3.程序:#if OS_CPU_HOOKS_EN > 0 INT8U d=0;INT8U l=0;INT16U tt=1;char s5;voi
40、d OSTimeTickHook (void) if(OSTCBPrioTbl2->OSTCBDly = 1)sprintf(s,"%5d",tt);PC_DispStr(d,l+4,s,DISP_BGND_BLACK+DISP_FGND_WHITE);d+=6; tt+=1;#endifTest.c#include "includes.h"#define TASK_STK_SIZE 512/任务堆栈长度OS_STK MyTaskStkTASK_STK_SIZE;/定义任务堆栈区OS_STK YouTaskStkTASK_STK_SIZE;/定义任
41、务堆栈区INT16S key;/用于退出uCOS_II的键INT8U x=0,y=0;/字符显示位置void MyTask(void *data);/声明任务void YouTask(void *data);/声明任务void main (void) char* s_M="M"/定义要显示的字符 OSInit();/初始化uCOS_II PC_DOSSaveReturn();/保存Dos环境 PC_VectSet(uCOS, OSCtxSw);/安装uCOS_II中断 PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OST
42、askCreate(MyTask,/创建任务MyTasks_M,/给任务传递参数&MyTaskStkTASK_STK_SIZE - 1,/设置任务堆栈栈顶指针0);/使任务MyTask的优先级别为0 OSStart();/启动uCOS_II的多任务管理void MyTask (void *pdata) char* s_Y="Y"/定义要显示的字符#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickIS
43、R);/安装uCOS_II时钟中断向量 PC_SetTickRate(OS_TICKS_PER_SEC);/设置uCOS_II时钟频率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的统计任务 OSTaskCreate(YouTask,/创建任务MyTasks_Y,/给任务传递参数&YouTaskStkTASK_STK_SIZE - 1,/设置任务堆栈栈顶指针2);/使任务MyTask的优先级别为2 for (;) if (x>50) x=0; y+=2; if(y>1) OSTimeDlyResume(2); /取消YouTask
44、任务的延时 PC_DispChar(x, y,/显示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x+; if (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSReturn(); OSTimeDly(300);/延时100个时钟节拍 void YouTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if (x>50) x=0; y+=2;
45、PC_DispChar(x, y,/显示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDly(500);/延时500个时钟节拍 4.#include "includes.h"#define TASK_STK_SIZE 512/任务堆栈长度OS_STK TaskStartStkTASK_STK_SIZE;/定义任务堆栈区INT16S key;INT32U stime;/用于退出uCOS_II的键INT8U x=0;void MyTask(void *data);/声明一个任务void main (void) OSInit();/初始化uCOS_II PC_DOSSaveReturn();/保存Dos环境 PC_VectSet(uCOS, OSCtxSw);/安装uCOS_II中断 PC_DispClrScr(DISP_FGND_WHITE + D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论