新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > UCOSII在運行時進入了OS_TaskIdle的問題

        UCOSII在運行時進入了OS_TaskIdle的問題

        作者: 時間:2016-11-27 來源:網絡 收藏
        目前正在用ucosii跑幾個小任務,還算穩定。由于接觸ucosii時間并不太長,所以出了問題還是會在系統上找問題。

        int main(void)

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

        {
        INT8U ret = 0;

        IOInit(); //外設功能初始化
        OSInit(); //uCOS-II系統初始化

        ret = OSTaskCreate( MY_Task, //初始化任務
        (void*)0, //無參數
        &Start_TaskStk[APP_TASK_STK_SIZE-1], //任務堆棧大小為128*4Byte
        PRIO_START_TASK); //優先級最高


        OSStart(); //開始任務調度
        return 0;
        }
        void MY_TASK()
        {
        OSStatInit(); //統計任務初始化
        ret = OSTaskCreate(tasksd,
        NULL,
        &GuiTaskStk[APP_TASK_STK_SIZE-1],
        PRIO_SD_HANDLE_TASK);
        ret = OSTaskCreate(Web_TASK,
        NULL,
        &KeyTaskStk[APP_TASK_STK_SIZE-1],
        PRIO_TEMP_TASK);

        ret = OSTaskCreate(TemCheckTask,
        NULL, &TempTaskStk[APP_TASK_STK_SIZE-1],
        PRIO_WEB_TASK);

        }

        這是我建的任務。
        實際上,每個任務都是一個死循環。循環里邊是要處理的代碼。
        循環的最后是一個ostimedly();函數用于延時,在延時的時候,將該循環里的任務掛起,執行下一個優先級任務。當延時到了,又會跑到優

        先級最高里了。
        在我加了ds18b20的函數后,發現程序進入OS_TaskIdle();內出不來了,以為延時時間少,然后加到10-100,可還是不行。去掉ds18b20

        程序后就可以了,查找后發現,原來delay_us利用的時系統滴答做的延時,延時完后將滴答關掉了,而ucosii的心臟也是系統滴答產生的,

        這樣就會,卡在空閑任務里了。
        void SysTick_Handler(void)
        {
        OSIntEnter();

        OSTimeTick();
        OSIntExit();
        }
        void delay_usinds(u32 Nus)
        {
        SysTick->LOAD=Nus*9; //時間加載
        SysTick->CTRL|=0x01; //開始倒數
        while(!(SysTick->CTRL&(1<<16))); //等待時間到達
        SysTick->CTRL=0X00000000; //關閉計數器
        SysTick->VAL=0X00000000; //清空計數器
        } 所以終于找到 進入空閑任務OS_TaskIdle()的原因了。



        關鍵詞: UCOSIIOS_TaskIdl

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东光县| 南雄市| 句容市| 巨鹿县| 武功县| 虎林市| 仙游县| 富源县| 徐州市| 浦县| 大新县| 泰安市| 乌审旗| 伊金霍洛旗| 库尔勒市| 奇台县| 尼木县| 古丈县| 盖州市| 庆城县| 灌阳县| 河南省| 鄂托克旗| 英吉沙县| 师宗县| 霸州市| 宜城市| 通渭县| 浮梁县| 墨竹工卡县| 郓城县| 改则县| 屯留县| 金门县| 博白县| 屯昌县| 石渠县| 西乡县| 边坝县| 宣汉县| 措勤县|