广嵌科技  广嵌教育  English  
 
首页 > 操作系统 > VxWorks > UC/OS II多任务切换例程
UC/OS II多任务切换例程
来源: 作者: 时间:2008-05-12 发布人:zhifeng

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,可以学习理解信号量的基本用法及多任务的调度方法.

 

·上一条:离子迁移谱仪嵌入式系统的设计
·下一条:基于VxWorks的双端口网卡智能双冗余驱动

评论
发布者 标题 发布日期
暂没有任何评论
以下发言只是广嵌网会员个人意见,非本网立场 查看更多评论

发表评论
·尊重网上道德,遵守中华人民共和国的各项有关法律法规。
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任。
·本站管理人员有权保留或删除其管辖留言中的任意内容,本站有权在网站内转载或引用您的评论。
·参与本评论即表明您已经阅读并接受上述条款。
标题:
发布者:
内容:
验证码:

相关信息
·VxWorks下的任务监..
·基于VxWorks的多串..
·Eclipse架构将主导..
·VxWorks环境下双冗..
·基于MPC755的嵌入式..
·片上PowerPC在Vx..
·嵌入式操作系统在高速实时..
·基于VxWorks的双端..
·UC/OS II多任务切..
·UCOS II多任务切换..
Copyright ©2005-2007 广东省嵌入式软件公共技术中心.All Rights Reserved.版权所有 复制必究
客户服务支持:020-32068395-832 24小时服务热线:13631411558
技术支持与报障:gdesc@midea.com.cn 020-32068395-807/809
粤ICP备05104135号