⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 在pc机上运行uc/os所需要的文件以及需要的编译环境
💻 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 + -