实时操作系统实验报告2.doc
文本预览下载声明
实时操作系统实验报告
专业: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();
显示全部