<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > UCOSII在運行時進入了OS_TaskIdle的問題

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

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

          int main(void)

          本文引用地址:http://www.ex-cimer.com/article/201611/322262.htm

          {
          INT8U ret = 0;

          IOInit(); //外設(shè)功能初始化
          OSInit(); //uCOS-II系統(tǒng)初始化

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


          OSStart(); //開始任務(wù)調(diào)度
          return 0;
          }
          void MY_TASK()
          {
          OSStatInit(); //統(tǒng)計任務(wù)初始化
          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);

          }

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

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

          程序后就可以了,查找后發(fā)現(xiàn),原來delay_us利用的時系統(tǒng)滴答做的延時,延時完后將滴答關(guān)掉了,而ucosii的心臟也是系統(tǒng)滴答產(chǎn)生的,

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

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



          關(guān)鍵詞: UCOSIIOS_TaskIdl

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();