uCOS创建任务实例---code from《嵌入式实时操作系统uCos-II原理及应用》

/****************test******************/
#include "includes.h"
#define TASK_STK_SIZE 512 //任务堆栈长度
OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK YouTaskStk[TASK_STK_SIZE]; //定义任务堆栈
INT16S key; //用于退出uC/OS-II的键
INT8U x=0,y=0; //字符显示位置
void MyTask(void *data); //声明一个任务
void YourTask(void *data);//声明任务


/*************************主函数******************/
void main(void)
{
char *s_M="M"; //定义要显示的字符
OSInit(); //初始化uC/OS-II
PC_DOSSaveReturn(); //保存dos环境
PC_VectSet(uCOS,OSCtxSw);//安装uc/OS任务切换中断向量
OSTaskCreate(
s_M, //给任务传递参数
&MyTaskStk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
0 //MyTask优先级别为0
);
OSStart(); //启动多任务管理
}
/**********************************任务MyTask**************************/
void MyTask(void *pdata)
{
char *s_Y="Y";


#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR); //安装uC/OS-II时钟中断向量
PC_SetTickRate(OS_TICKS_PER_SEC); //设置uc/os-II时钟频率
OS_EXIT_CRITICAL();
OSStatInit(); //初始化uc/os-II的统计任务
OSTaskCreate(
YourTask,
s_Y,
&YourTaskStk[TASK_STK_SIZE-1],
2
);


for(;;)
{
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);
x+=1;
//如果按下ESC键,则退出UCOS-ii
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn(); //返回Dos
}
}
OSTimeDlyHMSM(0,0,3,0); //等待1s
}
}


/*******************************任务 YourTask******************************/
void YourTask(void *pdata)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for(;;)
{
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(
x,y, //字符的显示位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE
);
x+=1;
OSTimeDlyHMSM(0,0,1,0); //等待1s
}
}
/*************************end************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值