曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 8234|回复: 0
打印 上一主题 下一主题

实例:在任务中创建一个新的任务

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-14 01:49:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:在任务中创建一个新的任务,第一个任务显示M字母,第二个任务显示Y字母,每隔1s轮流现实
目的:熟悉在任务中创建一个新的任务
程序代码:
#include "includes.h"

#define  TASK_STK_SIZE                 512 

OS_STK        DispCharMStk[TASK_STK_SIZE];    

OS_STK    DispCharYStk[TASK_STK_SIZE];

  

    void  DispCharM(void *data);                

    void  DispCharY(void *data);

  

void  main (void)
{

  char *s_M = "M";

  PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);    

  OSInit();                                            

  PC_DOSSaveReturn();                                   

  PC_VectSet(uCOS, OSCtxSw);                           

  OSTaskCreate(DispCharM, s_M, &DispCharMStk[TASK_STK_SIZE - 1], 0);
  OSStart();                                          

}



void  DispCharM (void *pdata)
{
#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
  OS_CPU_SR  cpu_sr;
#endif
  INT16S     key;
  char *s_Y = "Y";
  INT8U x = 0;
  INT8U y = 0;

  pdata = pdata;                                         /* Prevent compiler warning                 */

  OS_ENTER_CRITICAL();
  PC_VectSet(0x08, OSTickISR);                           /* Install uC/OS-II's clock tick ISR        */
  PC_SetTickRate(OS_TICKS_PER_SEC);                      /* Reprogram tick rate                      */
  OS_EXIT_CRITICAL();

  OSStatInit();                                          /* Initialize uC/OS-II's statistics         */

  OSTaskCreate(DispCharY, s_Y, &DispCharYStk[TASK_STK_SIZE - 1], 1);

  for (;;)
   {


  PC_DispChar( x, y, *(char *)pdata, DISP_FGND_WHITE);


  if( PC_GetKey(&key) == TRUE )
  {
   if( key == 0x1B )
   {
    PC_DOSReturn();
    }


  }
         x += 2;
       if( x > (DISP_MAX_X - 1) )
     {
    y++;
    x = 0;
     }

   if( y >= (DISP_MAX_Y - 1) )
    {
     y = 0;
     x = 0;
    }


     OSTimeDlyHMSM(0,0,2,0);            //waitt for 1s


   }

}

void DispCharY(void *pdata)
{
#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
  OS_CPU_SR  cpu_sr;
#endif
  INT8U x = 1;
  INT8U y = 0;
  INT16S     key;

  pdata = pdata;

  for (;;)
   {

  OSTimeDlyHMSM(0,0,1,0);        /*此时只有空闲任务和统计任务在运行*/

  

  PC_DispChar( x, y, *(char *)pdata, DISP_FGND_WHITE);


  if( PC_GetKey(&key) == TRUE )
  {
   if( key == 0x1B )
   {
    PC_DOSReturn();
    }

  }

    x += 2;
            if( x > DISP_MAX_X - 1)
     {
    y++;
    x = 1;
     }
    if( y > DISP_MAX_Y - 1)
    {
     y = 0;
     x = 1;
    }
     OSTimeDlyHMSM(0,0,1,0);            //waitt for 1s
  }
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 11:07 , Processed in 0.075685 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表