发布时间 : 星期二 文章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,
//显示字符的位置