USB中国技术论坛

admin 发表于 2008-6-25 07:08

UC/OS

#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,可以学习理解信号量的基本用法及多任务的调度方法.     
[color=red'][b][1][/b][/color]

Powered by USB中国技术论坛 Archiver 6.1.0  © 2001-2007USB中国技术论坛

USB开发中国论坛静态html版本,已经seo36.com协助优化!