1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      UC/OS II多任務切換例程

      更新時間: 2008-05-12 11:47:04來源: 粵嵌教育瀏覽量:1198

      UC/OS II多任務切換例程

       

      #include "config.h"

       

      #define    TaskStkLengh    64           
      OS_STK    TaskStk [TaskStkLengh];       
      OS_STK    TaskStk1 [TaskStkLengh];
      OS_STK    TaskStk2 [TaskStkLengh];

       

      OS_EVENT  *TASK1;        
      OS_EVENT  *TASK2;   
      OS_EVENT  *TASK3;   

       

      void     Task0(void *pdata);            //Task0 ÈÎÎñ0
      void     Task1(void *pdata);   
      void     Task2(void *pdata);   

       

      uint8 err;
      void  UART0_Ini(void)
      {  uint16 Fdiv;

       

         U0LCR = 0x83;                   
         Fdiv = (Fpclk / 16) / UART_BPS; 
         U0DLM = Fdiv / 256;                           
         U0DLL = Fdiv % 256;                       
         U0LCR = 0x03;
      }
      void  UART0_SendByte(uint8 data)
      {  U0THR = data;                    // ·¢ËÍÊý¾Ý

       

         while( (U0LSR&0x40)==0 );        // µÈ´ýÊý¾&Yacute
      }

       

      int main (void)
      {
          OSInit 
      ();                                                                                                       
          OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 0);    
          TASK1=    OSSemCreate(0);
          TASK2=    OSSemCreate(0); 
          TASK3=    OSSemCreate(0);    
          TargetInit();
          OSStart ();
          return 0;                                                           
      }
      /*******************************************************************************************
      **                            Task0 ÈÎÎñ0
      *******************************************************************************************/

       

          void Task0    (void *pdata)
      {
          UART0_Ini();
              OSTaskCreate(Task1, (void *)0, &TaskStk1[TaskStkLengh-1], 9);
              OSTaskCreate(Task2, (void *)0, &TaskStk2[TaskStkLengh-1], 10);
              OSSemPost(TASK1);      
              for (;;)
              {    
                    OSSemPend(TASK1,10,&err   
                   if(err==OS_NO_ERR)
                     {
                          
                     UART0_SendByte(0x01);             
                     OSSemPost(TASK2);
                  }
            
              }
      }
      /*******************************************************************************************                       Task1 ÈÎÎñ1
      *******************************************************************************************/
          void Task1    (void *pdata)
      {
         
              UART0_Ini();
              for (;;)
              {
                   OSSemPend(TASK2,10,&err);   
                   if(err==OS_NO_ERR)
                   {       
                 
                     UART0_SendByte(0x02);
                 
                     OSSemPost(TASK3);  

       

                   }
            
              }
      }

       


          void Task2    (void *pdata)
      {
         
              UART0_Ini();
              for (;;)
              {
                   OSSemPend(TASK3,10,&err);//»&   
                   if(err==OS_NO_ERR)
                     {
                           
                     UART0_SendByte(0x03);
                  
                     OSSemPost(TASK1);
                   }
            
              }
      }

       

      三個任務分別通過UART0輸出0X01,0X02,0X03,可以學習理解信號量的基本用法及多任務的調度方法.

       

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲乱码国产乱码精品精98 | 亚洲国产一区二区三区在线播放 | 亚洲欧洲国产码专区在线观看 | 中文字幕第一页在线 | 尤物国产在线精品一区 | 久久综合国产乱子伦 |