foggia2004

发送消息与请求消息

 

  1 #include "includes.h"
  2 #define  TASK_STK_SIZE   512            //任务堆栈长度
  3 
  4 /******任务堆栈*********/
  5 OS_STK   TaskStartStk[TASK_STK_SIZE];        //任务堆栈区
  6 OS_STK   Stk_Task_1[TASK_STK_SIZE];            //任务1堆栈区
  7 OS_STK   Stk_Task_2[TASK_STK_SIZE];            //任务2堆栈区
  8 
  9 
 10 /********全局变量*****************/
 11 INT16S            key;                    //用于退出uCOS_II的键    
 12 INT8U            x=0,y=0;                //消息
 13 OS_EVENT        *Msg_box;                //消息邮箱
 14 INT8U            err;                    //错误代码
 15 
 16 /*******任务声明************/
 17 void MyTask(void * pdata);
 18 void Task_1(void * pdata);            //任务1
 19 void Task_2(void * pdata);            //任务2
 20 
 21 /************************主函数*********************************************/
 22 void  main (void)
 23 {
 24     OSInit();                            //初始化uCOS_II
 25 
 26     Msg_box=OSMboxCreate((void *)0);    //创建消息邮箱
 27 
 28     PC_DOSSaveReturn();                    //保存Dos环境
 29     PC_VectSet(uCOS, OSCtxSw);            //安装uCOS_II中断
 30 
 31     OSTaskCreate(MyTask,0,&TaskStartStk[TASK_STK_SIZE - 1],0);                //使任务MyTask的优先级别为0
 32     OSStart();                            //启动uCOS_II的多任务管理
 33 }
 34 
 35 
 36 void  MyTask(void *pdata)
 37 {
 38 #if OS_CRITICAL_METHOD == 3
 39     OS_CPU_SR  cpu_sr;
 40 #endif
 41 
 42     pdata = pdata; 
 43 
 44     OS_ENTER_CRITICAL();
 45     PC_VectSet(0x08, OSTickISR);        //安装uCOS_II时钟中断向量
 46     PC_SetTickRate(OS_TICKS_PER_SEC);    //设置uCOS_II时钟频率
 47     OS_EXIT_CRITICAL();
 48 
 49     OSStatInit();                        //初始化uCOS_II的统计任务
 50     
 51     /********创建任务*************/
 52     //任务1,优先级别2
 53     OSTaskCreate(Task_1,(void *)0,&Stk_Task_1[TASK_STK_SIZE-1],2);
 54     //任务2,优先级别3
 55     OSTaskCreate(Task_2,(void *)0,&Stk_Task_2[TASK_STK_SIZE-1],3);
 56 
 57     for (;;) 
 58     {        
 59         //如果按下Esc键则退出uCOS_II
 60         if (PC_GetKey(&key) == TRUE) 
 61         {
 62             if (key == 0x1B) 
 63             {
 64                 PC_DOSReturn();
 65             }
 66         }
 67 
 68         OSTimeDlyHMSM(0, 0, 1, 0);    //等待
 69     }
 70 }
 71 
 72 //发送消息
 73 void  Task_1(void *pdata)
 74 {
 75 #if OS_CRITICAL_METHOD == 3
 76     OS_CPU_SR  cpu_sr;
 77 #endif
 78 
 79     pdata=pdata;
 80     while(1)
 81     {
 82         OSMboxPost(Msg_box,(void *)x);
 83         x++;
 84         OSTimeDlyHMSM(0,0,0,200);
 85     }
 86 }
 87 
 88 //请求消息
 89 void  Task_2(void *pdata)
 90 {
 91 #if OS_CRITICAL_METHOD == 3
 92     OS_CPU_SR  cpu_sr;
 93 #endif
 94 
 95     pdata=pdata;
 96     while(1)
 97     {
 98         y=(INT8U)OSMboxPend(Msg_box,0,&err);  //请求消息
 99         printf("y=%d\n",y);                      //输出消息
100         OSTimeDlyHMSM(0,0,0,200);
101     }
102 }

 

posted on 2016-04-28 09:43  foggia2004  阅读(138)  评论(0)    收藏  举报

导航