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

📄 test.c

📁 uCOS2嵌入式操作系统源码
💻 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 + -