📄 test.c
字号:
#include "includes.h"
#define TASK_STK_SIZE 512 //任务堆栈大小
OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK YouTaskStk[TASK_STK_SIZE];
OS_STK HisTaskStk[TASK_STK_SIZE];
OS_STK SystemTaskStk[TASK_STK_SIZE];
INT16S key;
INT8U x = 0,y = 0; //字符显示位置初始化
void MyTask(void *data);
void YouTask(void *data);
void HisTask(void *data);
void SystemTask(void *data);
#define MY_PRIORITY 3
#define YOU_PRIORITY 1
#define HIS_PRIORITY 2
#define SYSTEM_TASK_PRIORITY 0
#define MY_DELAY 400
#define YOUR_DELAY 300
#define HIS_DELAY 900
#define SYSTEM_TASK_DELAY 3 // 不能是1或2 ???
//#define NULL 0
/*-------------------------------------------------------------
函数名:main
输 入:
输 出:
备 注:2006-05-23 19:37
-------------------------------------------------------------*/
void main(void)
{
char *s_M = " My task ^_^ ";
OSInit(); //初始化uC/OS-II
PC_DOSSaveReturn();
PC_VectSet(uCOS,OSCtxSw);
OSTaskCreate(
MyTask, // 创建任务MyTask,即指向任务的指针
s_M, // 传递给任务的参数
&MyTaskStk[TASK_STK_SIZE - 1], // 任务堆栈栈顶指针
MY_PRIORITY // 设定优先级
);
OSStart();
}
/*-------------------------------------------------------------
函数名:MyTask(任务)
输 入:
输 出:
备 注:2006-05-23 19:37
-------------------------------------------------------------*/
void MyTask(void *pdata)
{
char *s_Y = " Your task... ";
char *s_H = " His task -->> Xu Dong ";
char *temp;
temp = (char *)pdata;
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
//pdata = pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit(); //初始化统计任务
OSTaskCreate(
YouTask, //创建任务YouTask
s_Y,
&YouTaskStk[TASK_STK_SIZE - 1], // 设定任务堆栈栈顶
YOU_PRIORITY
);
OSTaskCreate(
HisTask,
s_H,
&HisTaskStk[TASK_STK_SIZE - 1],
HIS_PRIORITY
);
OSTaskCreate(
SystemTask,
s_H,
&SystemTaskStk[TASK_STK_SIZE - 1],
SYSTEM_TASK_PRIORITY
);
PC_DispClrScr(DISP_BGND_BLACK + DISP_FGND_WHITE); // 清屏
for(;;)
{
if(x > 79)
{
x = 0;
y += 2;
if(y>25)
{
y = 0;
PC_DispClrScr(DISP_BGND_BLACK + DISP_FGND_WHITE);
}
}
(char *)pdata = temp;
do
{
PC_DispChar(
x,y,
*(char *)pdata,
DISP_BGND_BLACK + DISP_FGND_YELLOW
);
((char *)pdata)++;
x++;
// OSTimeDlyHMSM(0,0,0,100);
} while( (*(char *)pdata) != NULL ) ;
OSTimeDlyHMSM(0,0,0,MY_DELAY);
}
}
/*-------------------------------------------------------------
函数名:YouTask(任务)
输 入:
输 出:
备 注:2006-05-23 19:38
-------------------------------------------------------------*/
void YouTask(void *pdata)
{
char *temp;
temp = (char *)pdata;
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
for(;;)
{
if(x > 79)
{
x = 0;
y += 2;
if(y>25)
{
y = 0;
PC_DispClrScr(DISP_BGND_BLACK + DISP_FGND_WHITE);
}
}
(char *)pdata = temp;
do
{
PC_DispChar(
x,y,
*(char *)pdata,
DISP_BGND_BLACK + DISP_FGND_LIGHT_RED
);
((char *)pdata)++;
x++;
} while( (*(char *)pdata) != NULL ) ;
OSTimeDlyHMSM(0,0,0,YOUR_DELAY);
}
}
//-----------------------------------------------------------------------------------
void HisTask(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
char *temp; // 保存首地址,因为是字符串显示,需要调整水平位置!!!
temp = (char *)pdata;
for(;;)
{
if(x > 79)
{
x = 0;
y += 2;
if(y > 25)
{
y = 0;
PC_DispClrScr(DISP_BGND_BLACK + DISP_FGND_WHITE);
}
}
pdata = temp;
do
{
PC_DispChar(
x,y,
*(char *)pdata,
DISP_BGND_BLACK + DISP_FGND_LIGHT_GREEN
);
((char *)pdata)++;
x++; // 水平显示位置调整
//OSTimeDlyHMSM(0,0,0,100);
} while( (*(char *)pdata) != NULL ) ;
OSTimeDlyHMSM(0,0,0,HIS_DELAY); // 注意:这时才进行任务调度??? 2006-12-21 17:56
}
}
void SystemTask(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
for(;;)
{
if(PC_GetKey(&key) == TRUE)
{
if(key == 0x1B)
{
PC_DOSReturn();
}
}
OSTimeDlyHMSM(0,0,0,SYSTEM_TASK_DELAY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -