文档详情

实时操作系统实验报告2.doc

发布:2017-11-04约8.46千字共13页下载文档
文本预览下载声明
实时操作系统实验报告 专业:11通信工程 学号:20110306136 姓名: 王 帅 指导老师:申屠浩 实验二 任务管理实验 实验目的: 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 掌握μC/OS-II中任务管理的基本方法(挂起、解挂); 熟练使用μC/OS-II任务管理的基本系统调用。 实验要求与思路: 为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。 T0 T1 T2 T3 T4 T5 T6 T7 T8 图2-2 注意: 图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。 说明: 在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3个应用任务T0、T1和T2,之后整个系统的运行流程如下: 1) 优先级最高的T0开始执行,之后T0挂起自己; 2) 然后系统调度选中T1开始执行,之后T1挂起自己; 3) 接着系统调度选中T2,之后唤醒T0; 4) 如此循环 实现提示: 在启动任务中创建三个任务后,应挂起任务1和任务2。 在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。 函数说明: void PC_GetDateTime (char *s); 获取YYYY-MM-DD HH:MM:SS格式的时间字串存放在字符串s中,s的长度最少为21字节。 void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color); 在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli); 按时、分、秒、毫秒设置进行延时。 void OSTimeDly (INT16U ticks) 按ticks值进行延时,1 ticks一般为10ms。 INT32U OSTimeGet (void) 获取从程序开始运行到当前时间,所经过的ticks值。 实验程序: #include includes.h #define TASK_STK_SIZE 512 OS_STK TaskStk1[TASK_STK_SIZE]; OS_STK TaskStk2[TASK_STK_SIZE]; OS_STK TaskStk3[TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; void Task1(void *data); void Task2(void *data); void Task3(void *data); /* Function prototypes of tasks*/ void TaskStart(void *data); /* Function prototypes of Startup task */ static void TaskStartCreateTasks(void); static void TaskStartDispInit(void); void main (void) { PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs context switch vector */ OSTaskCreate(TaskStart, (void *)0, TaskStartStk[TASK_STK_SIZE - 1], 4); OSStart();
显示全部
相似文档