|
小弟初学ucos,如下这段程序是任哲《嵌入式操作系统ucos原理及应用》当中的例子,是在BC3.1中运行的
小弟想把它放在VC6.0中运行,大神能帮我看下有哪些地方是需要改动的吗?
#include "includes.h"
#define TASK_STK_SIZE 512 /*定义堆栈的长度*/
OS_STK MyTaskStk[TASK_STK_SIZE];/*定义一个数组来作为任务堆栈*/
/*这里定义OS_STK_GROWTH=1,默认是堆栈向下增长(高地址->低地址)*/
INT8U x=0,y=0;
INT16S key;
void main()
{
char* s_M="M";/*定义要显示的字符*/
OSInit(); /*初始化ucos*/
PC_DOSSaveReturn();/*书上说这段代码是用来保护DOS环境,那现在不在DOS环境下,需要修改这段代码吗*/
PC_VectSet(uCOS,OSCtxSw);
OSTaskCreate( /*创建一个任务*/
MyTask, /*指向任务的指针*/
s_M, /*传递给任务的参数*/
&MyTaskStk[TASK_STK_SIZE-1],/*指向任务堆栈栈顶的指针*/
0 /*任务的优先级(这里设置为最高)*/
);
OSStart(); /*启动任务调度*/
}
void MyTask(void* pdata)
{
#if OS_CRITICAL_METHOD == 3/*启用方式3*/
OS_CPU_SR cpu_sr; /*定义CPU的状态寄存器是32位的*/
#endif
pdata=pdata;
OS_ENTER_CRITICAL();/*进入临界段(关中断)*/
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);/*这个地方需要修改吗*/
OS_EXIT_CRITICAL();
OSStatInit();
for(;;)
{
if(x>10)
{
x = 0;
y += 2;
}
PC_DispChar(
x,y,
*(char*)pdata,
DISP_BGND_BLACK + DISP_FGND_WGITE
);
x += 1;
/*如果按下ESC,则退出ucos*/
if(PC_GetKey(&key) == TRUE)
{
if(key == 0x1B)
{
PC_DOSReturn();
}
}
OSTimerDlyHMSM(0,0,1,0);
}
}
|
|