新聞中心

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



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和林格尔县| 达州市| 赤峰市| 湄潭县| 绵竹市| 象山县| 子长县| 桐城市| 嘉峪关市| 东源县| 冕宁县| 贵德县| 九台市| 胶州市| 铜梁县| 班玛县| 武川县| 沿河| 德安县| 拉孜县| 普定县| 郧西县| 五莲县| 建昌县| 普洱| 咸丰县| 嫩江县| 稻城县| 荔波县| 淮南市| 乌什县| 怀远县| 江孜县| 蛟河市| 社旗县| 德格县| 富源县| 鄂温| 伊通| 承德市| 昔阳县|