实时操作系统实验

  • 格式:doc
  • 大小:159.00 KB
  • 文档页数:17

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实时操作系统实验报告

专业:10通信工程

学号:20100306110

**: **

****:***

实验一任务管理实验

实验目的:

1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;

2.掌握μC/OS-II 中任务管理的基本方法(挂起、解挂);

3.熟练使用μC/OS-II 任务管理的基本系统调用。

实验要求与思路:

为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1 和T3

三个任务,它们交替运行,如图所示

说明:

在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创

建其他3 个应用任务T0、T1 和T2,之后整个系统的运行流程如下:

1)优先级最高的T0 开始执行,之后T0 挂起自己;

2)然后系统调度选中T1 开始执行,之后T1 挂起自己;

3)接着系统调度选中T2,之后唤醒T0;

4)如此循环

实验程序:

#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-II's context switch vector */

OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);

OSStart(); /* Start multitasking */

}

void TaskStart (void *pdata)

{

#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */

OS_CPU_SR cpu_sr;

#endif

char s[100];

INT16S key;

pdata = pdata;

TaskStartDispInit(); /* Initialize the display */

OS_ENTER_CRITICAL();

PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */

PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL();

OSStatInit(); /* Initialize uC/OS-II's statistics */

OSTaskCreate(Task1, (void *)0, &TaskStk1[TASK_STK_SIZE - 1], 1);

OSTaskCreate(Task2, (void *)0, &TaskStk2[TASK_STK_SIZE - 1], 2);

OSTaskCreate(Task3, (void *)0, &TaskStk3[TASK_STK_SIZE - 1], 3);

OSTaskSuspend(2);/* Prevent compiler warning */

OSTaskSuspend(3);

for (;;) {

if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */

PC_DOSReturn(); /* Return to DOS */ }

}

OSCtxSwCtr = 0; /* Clear context switch counter */ OSTimeDly(1);

}

}

static void TaskStartDispInit (void)

{

PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);