ucosII嵌入式实时操作系统实验 联系客服

发布时间 : 星期二 文章ucosII嵌入式实时操作系统实验更新完毕开始阅读bf5ef91959eef8c75fbfb346

2. 打开实验例程

1)运行C:\\SOFTWARE\\SOFTWARE\%uCOS-II\\例2-9\\Bc31\\TEST.exe, 观察运行结果;

运行结果如下:

2)分析整个实验文件目录结构及实验参考程序。

实验文件目录结构:一个实验例程包含一个bc31文件,bc31文件又包含有5个代码有关文件:LST,OBJ,SOURCE,TEST,WORK等。其中OBJ里面包含有源程序编译后的相关文件。SOURCE里面包含了源文件和相关的配置文件,可以在里面修改源文件,TEST里面含有编译后的测试文件和MAKETEST可以对修改后的源程序进行

编译,而后生成新的可执行文件TEST.exe。(具体做法为先删掉旧文件,修改好文件确认无误后用MAKETEST再进行编译即可生成新的可执行文件)。

3)按照课后习题要求编写程序并编译运行 1.课后习题第13题源程序:

#include \#define TASK_STK_SIZE 512

//任务堆栈长度 OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK YouTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK HisTaskStk[TASK_STK_SIZE]; //定义任务堆栈区

INT16S key;

//用于退出uCOS_II的键 INT8U x=0,y=0;

//字符显示位置

INT8U time=0;

void MyTask(void *data); //声明任务 void YouTask(void *data);

//声明任务

void HisTask(void *data); /************************

主函*********************************************/

void main (void) {

char* s_M=\ //定义要显示的字符 OSInit();

//初始化uCOS_II PC_DOSSaveReturn();

//保存Dos环境 PC_VectSet(uCOS, OSCtxSw);

//安装uCOS_II中断

OSTaskCreate(MyTask,

//创建任务MyTask

s_M,

//给任务传递参数

&MyTaskStk[TASK_STK_SIZE - 1],//设置任务堆栈栈顶指针

0);

//使任务MyTask的优先级别为0

OSStart();

//启动uCOS_II的多任务管理

}

/***********************

MyTask*******************************************/

void MyTask (void *pdata) {

char* s_Y=\

//定义要显示的字符

#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif

pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR);

//安装uCOS_II时钟中断向量

//设置uCOS_II时钟频率

PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit();

//初始化uCOS_II的统计任务

//创建任务MyTask

OSTaskCreate(YouTask,

s_Y,

//给任务传递参数

&YouTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针 2);

//使任务MyTask的优先级别为2

for (;;) { if (x>50)

{ x=0; y+=2;

}

PC_DispChar(x, y,

*(char*)pdata,

//显示字符的位置

DISP_BGND_BLACK+DISP_FGND_RED );

x += 1;

//如果按下Esc键则退出uCOS_II if (PC_GetKey(&key) == TRUE) {

if (key == 0x1B)

{

PC_DOSReturn(); } }

OSTimeDlyHMSM(0, 0, 2, 0); } }

void YouTask (void *pdata) {

char* s_Y=\

//定义要显示的字符

//创建任务MyTask

//等待

OSTaskCreate(HisTask,

s_Y,

//给任务传递参数

&HisTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针 3);

//使任务MyTask的优先级别为0

for (;;) { if (x>50)

{ x=0; y+=2;

}

PC_DispChar(x, y,

*(char*)pdata,

//显示字符的位置