📄 test.c
字号:
#include "includes.h"
#define TASK_STK_SIZE 512
#define TASK_START_ID 0
#define TASK_CLK_ID 1
#define TASK_1_ID 2
#define TASK_2_ID 3
#define TASK_3_ID 4
#define TASK_4_ID 5
#define TASK_START_PRIO 10
#define TASK_CLK_PRIO 11
#define TASK_1_PRIO 12
#define TASK_2_PRIO 13
#define TASK_3_PRIO 14
#define TASK_4_PRIO 15
//声明变量和函数--------------------------------------------------------------------
INT8U x,y;
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskClkStk[TASK_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
OS_STK Task4Stk[TASK_STK_SIZE];
void TaskStart(void *data);
static void TaskStartCreateTasks(void);
static void TaskStartDispInit(void);
static void TaskStartDisp(void);
void TaskClk(void *data);
void Task1(void *data);
void Task2(void *data);
void Task3(void *data);
void Task4(void *data);
//主函数-----------------------------------------------------------
void main(void)
{
OS_STK *ptos;
OS_STK *pbos;
INT32U size;
PC_DispClrScr(DISP_FGND_WHITE);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS,OSCtxSw);
PC_ElapsedInit();
ptos =&TaskStartStk[TASK_STK_SIZE-1];
pbos =&TaskStartStk[0];
size =TASK_STK_SIZE;
OSTaskStkInit_FPE_x86(&ptos,&pbos,&size);
OSTaskCreateExt(TaskStart,(void*)0,ptos,TASK_START_PRIO,TASK_START_ID,pbos,size,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSStart();
}
//起始任务----------------------------------------------------
void TaskStart(void *pdata)
{
#if OS_CRITICAL_METHOD ==3
OS_CPU_SR cpu_sr;
#endif
INT16S key;
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
TaskStartDispInit();
TaskStartCreateTasks();
for(;;)
{
TaskStartDisp();
if(PC_GetKey(&key)){
if(key==0x1B) {
PC_DOSReturn();
}
}
OSCtxSwCtr=0;
OSTimeDly(OS_TICKS_PER_SEC);
}
}
//屏幕初始化函数-------------------------------------------
static void TaskStartDispInit(void)
{
PC_DispClrScr(DISP_BGND_BLACK);
PC_DispStr(0,0," UC/OS-II,The Real-Time Kernel ",DISP_FGND_YELLOW+DISP_BGND_RED);
PC_DispStr(0,3," You daoping ",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,5," -8000105386- ",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,9,"Task Total Stack Free Stack Used Stack ExecTime(uS) ",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,10,"_______ ____________ ___________ ___________ ____________ ",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,12,"TaskStart():",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,13,"TaskClk() :",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,14,"Task1() :",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,15,"Task2() :",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,16,"Task3() :",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,22,"#Tasks :",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(25,22,"CPU USage:",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,23,"#Task switch/sec:",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(40,22,"%",DISP_FGND_WHITE+DISP_BGND_BLACK);
PC_DispStr(0,24," {-PRESS 'ESC' TO QUIT-} ",DISP_FGND_WHITE+DISP_BGND_BLUE);
}
//屏幕刷新函数----------------------------------------------------------------------
static void TaskStartDisp(void)
{
char s[80];
sprintf(s,"%5d",OSTaskCtr);
PC_DispStr(18,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"%3d",OSCPUUsage);
PC_DispStr(36,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"%5d",OSCtxSwCtr);
PC_DispStr(18,23,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"V%4.2f",(float)OSVersion() *0.01);
PC_DispStr(75,24,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
switch(_8087){
case0:
PC_DispStr(71,22,"NO FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case1:
PC_DispStr(71,22,"8087 FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case2:
PC_DispStr(71,22,"80287 FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case3:
PC_DispStr(71,22,"80387 FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
}
}
//创建任务函数-----------------------------------------------------------------
static void TaskStartCreateTasks(void)
{
OSTaskCreateExt(TaskClk,(void*)0,&TaskClkStk[TASK_STK_SIZE-1],
TASK_CLK_PRIO,TASK_CLK_ID,&TaskClkStk[0],TASK_STK_SIZE,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task1,(void*)0,&Task1Stk[TASK_STK_SIZE-1],
TASK_1_PRIO,TASK_1_ID,&Task1Stk[0],TASK_STK_SIZE,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task2,(void*)0,&Task2Stk[TASK_STK_SIZE-1],
TASK_2_PRIO,TASK_2_ID,&Task2Stk[0],TASK_STK_SIZE,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task3,(void*)0,&Task3Stk[TASK_STK_SIZE-1],
TASK_3_PRIO,TASK_3_ID,&Task3Stk[0],TASK_STK_SIZE,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task4,(void*)0,&Task4Stk[TASK_STK_SIZE-1],
TASK_4_PRIO,TASK_4_ID,&Task4Stk[0],TASK_STK_SIZE,
(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
}
//任务1-------------------------------------------------
void Task1(void *pdata)
{
INT8U err;
OS_STK_DATA data;
INT16U time;
INT8U i;
char s[80];
pdata=pdata;
for(;;){
for(i=0;i<5;i++){
PC_ElapsedStart();
err=OSTaskStkChk(TASK_START_PRIO+i,&data);
time=PC_ElapsedStop();
if(err==OS_NO_ERR){
sprintf(s,"%4ld %4ld %4ld %6d",
data.OSFree+data.OSUsed,
data.OSFree,
data.OSUsed,
time);
PC_DispStr(19,12+i,s,DISP_FGND_YELLOW+DISP_BGND_BLACK);
}
}
OSTimeDlyHMSM(0,0,0,100);
}
}
//任务2动画显示----------------------------------
void Task2(void *data)
{
data=data;
for(;;){
PC_DispChar(70,15,'|',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'/',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'-',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'\\',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
}
}
//任务3动画显示--------------------------------------
void Task3(void *data)
{
char dummy[200];
INT16U i;
data=data;
for(i=0;i<199;i++){
dummy[i]='?';
}
for(;;){
PC_DispChar(70,16,'|',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,16,'\\',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,16,'-',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,16,'/',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
}
}
// 计时任务---------------------------------------
void TaskClk(void *data)
{
char s[40];
data=data;
for(;;){
PC_GetDateTime(s);
PC_DispStr(60,23,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void Task4(void *data)
{
data=data;
x=30;
y=2;
a: for(;;){
PC_DispStr(x++,2,".",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(x==48)
goto b;
}
b: for(;;){
PC_DispStr(48,y++,".",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(y==6)
goto c;
}
c: for(;;){
PC_DispStr(x--,6,".",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(x==30)
goto d;
}
d: for(;;){
PC_DispStr(30,y--,".",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(y==2)
goto e;
}
e: for(;;){
x++;
PC_DispStr(x++,2," ",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(x==48)
goto g;
}
g: for(;;){
x--;
PC_DispStr(x--,6," ",DISP_FGND_YELLOW+DISP_BGND_BLACK);
OSTimeDly((OS_TICKS_PER_SEC)*0.05);
if(x==30)
goto a;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -