新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > UC/OS II多任務切換例程

        UC/OS II多任務切換例程

        作者: 時間:2016-10-08 來源:網絡 收藏

        UC/OS II多任務切換例程

        本文引用地址:http://www.104case.com/article/201610/305928.htm

        #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( (U0LSR0x40)==0 ); // µÈ´ýÊý¾Ý

        }

        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,可以學習理解信號量的基本用法及多任務的調度方法.



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 余姚市| 舒兰市| 分宜县| 玛纳斯县| 星座| 绥江县| 宁津县| 武威市| 分宜县| 梅州市| 镇康县| 靖远县| 太仆寺旗| 广州市| 信阳市| 弥勒县| 兴业县| 昌都县| 洪江市| 赤壁市| 嘉荫县| 巴林左旗| 南和县| 焉耆| 平陆县| 阜新市| 古交市| 中卫市| 广水市| 奇台县| 巴东县| 读书| 广东省| 廊坊市| 上栗县| 易门县| 平山县| 桦甸市| 桂平市| 綦江县| 石阡县|