Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1011808
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-02-12 22:46:36

设计一个有2个任务的应用程序Mytask,运行后工作是:每秒在显示器上显示一串字符"M",在任务MyTask中再建立一个任务YouTask,要求YouTask任务运行5次后,挂起任务MyTask;然运行10次后,恢复任务MyTask
 
#include "INCLUDES.h"
#define  TASK_STK_SIZE        512       /* 任务堆栈长度*/            
OS_STK        MyTaskStk[TASK_STK_SIZE];
OS_STK        YouTaskStk[TASK_STK_SIZE];
INT8U  x=0,y=0;   //字符显示位置 

void  MyTask(void *data);            /* 声明任务      */
void  YouTask(void *data);
void  main (void)
{
 
 char *s_m="M";
    OSInit();                /* 初始化uC/OS-II */
    PC_DOSSaveReturn();      /* 保存DOS环境     */
    PC_VectSet(uCOS, OSCtxSw);/* 安装uC/OS-II的中断 */
    OSTaskCreate(MyTask,  
                    s_m, //任务MyTask执行时传递给MyTask
    &MyTaskStk[TASK_STK_SIZE - 1],
                     0);
    OSStart();               /* 启动多任务管理   */
}
 
//set up task
void  MyTask(void *pdata)
{
 char *S="Y";           //定义要显示的字符
#if OS_CRITICAL_METHOD == 3/* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
#endif
    INT16S        key;   /*用于退出的建*/
    pdata = pdata;      /* Prevent compiler warning*/
    OS_ENTER_CRITICAL();
    PC_VectSet(0x08, OSTickISR);  /* 安装时钟中断向量  */
    PC_SetTickRate(OS_TICKS_PER_SEC); /* 设置时钟频率 */
    OS_EXIT_CRITICAL();
    OSStatInit();            /* 初始化统计任务   */
    OSTaskCreate(YouTask,    //创建的任务名
                       S, //任务YouTask执行时S传递给使用YouTask作为参数(邵P117,ENP108)
                       &YouTaskStk[TASK_STK_SIZE - 1], 
                       2); 
   for (;;)
   {
        if(x>50)
        {
         x=0;
         y+=2;
        }
    PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE); 
    x+=1;      
             //如果恩下ESC键,则退出UC/OS-II
        if (PC_GetKey(&key) == TRUE)
         {  /* See if key has been pressed */
            if (key == 0x1B) 
            {
              PC_DOSReturn();
            }
        }
        OSTimeDlyHMSM(0, 0, 3, 0);  
   }
}
void  YouTask(void *pdata)
{
 INT8U  time=0;
#if OS_CRITICAL_METHOD == 3        //Allocate storage for CPU status register
    OS_CPU_SR  cpu_sr;
#endif
 pdata=pdata;
 for (;;)
 {
  if(time==5)
  {
   OSTaskSuspend(0);  //挂起任务MYTASK
  }
  if(time==10)
  {
   OSTaskResume(0);   //恢复任务Mytask
  }
  time+=1;
  
     if(x>50)
      {
       x=0;
       y+=2;
      }
  PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);
  x+=1;      
     
        OSTimeDlyHMSM(0, 0, 1, 0);                
    } 
}
 
 
执行结果见相册
 
阅读(2256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~