实时操作系统实验报告
- 格式:doc
- 大小:402.00 KB
- 文档页数:27
实时操作系统实验报告
专业:通信工程
学号:---------
姓名:--------
指导老师: ------
实验一任务编程实验
实验目的:
●理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;
●掌握µC/OS-II系统的编程方法,包括main函数的书写方法,任务组成、
创建、启动和时间函数,主要包括:
⏹OSInit; OSStart; OSTaskCreate;PC_DispStr;PC_GetKey;
OSTimeDlyHMSM;OSTimeDly;OSTimeGet等。
实验要求与思路:
创建3个任务task1、task2、task3.task1完成利用OSTimeGet(或PC_GetDateTime)实现时间的获取,同时利用PC_DispStr实现时间的显示。Task2和task3各自完成一个动画显示的任务——在屏幕上依次输出字符“|”、“\”、“—”、“/”而产生一个向左转动和向右转动的动画标志。同时需要编写一个启动任务实现对时间任务的启动。
实验程序:
#include "includes.h"
#define TASK_STK_SIZE 512
#define TASK_START_PRIO 2
#define TASK_1_PRIO 4
#define TASK_2_PRIO 5
#define TASK_3_PRIO 6
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
void TaskStart(void *pdata);
void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);
void TaskStartDispInit (void);
void main(void)
{
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS,OSCtxSw);
OSTaskCreate(TaskStart,0,&TaskStartStk[TASK_STK_SIZE-1],TASK_START_PRIO);
OSStart();
}
void TaskStart(void *pdata)
{
INT16S key=0;
INT8U err;
pdata=pdata;
TaskStartDispInit();
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
err=OSTaskCreate(Task1,0,&Task1Stk[TASK_STK_SIZE-1],TASK_1_PRIO);
err=OSTaskCreate(Task2,0,&Task2Stk[TASK_STK_SIZE-1],TASK_2_PRIO);
err=OSTaskCreate(Task3,0,&Task3Stk[TASK_STK_SIZE-1],TASK_3_PRIO);
for(;;){
if(PC_GetKey(&key)){
if(key==0x1B){
PC_DOSReturn();
}
}
OSCtxSwCtr=0;
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void TaskStartDispInit (void)
{
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel
", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, " Jean J. Labrosse
", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, "
", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " EXAMPLE #2
", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, "
", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, "