音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

問ucos2中的統(tǒng)計任務

作者:太陽草 欄目:嵌入式系統(tǒng)
問ucos2中的統(tǒng)計任務
     在uCOS2書中描述講解統(tǒng)計任務時提到使OS_TASK_STAT_EN為1允許了統(tǒng)計任務運行,然后在用戶程序運行中該任務每秒運行一次,是如何實現(xiàn)每秒運行一次的呢?
    我們知道統(tǒng)計任務在OSInit()中創(chuàng)建(優(yōu)先級是OS_LOWEST_PRIO-1并設置就緒狀態(tài)為FALSE)、在第一個任務中調(diào)用OSStatInit()進行初始化并就緒態(tài)設為TURE,開始程序后面的工作因為應用程序的任務數(shù)不定運行時間也不定而統(tǒng)計的任務的優(yōu)先級又低,那如何在1秒鐘后一定來運行統(tǒng)計任務呢?
    請大家?guī)蛶兔Γ?br>
2樓: >>參與討論
太陽草
再求!
我想我還是沒 能很好的搞清楚一個嵌入式程序的運行順序比如:
#include "inclides.h"

#define  TASK_STK_SIZE   512

OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   Task1Stk[TASK_STK_SIZE];
OS_STK   Task2Stk[TASK_STK_SIZE];

void  TaskStart(void *data);
void  Task1(void *data);
void  Task2(void *data);


//////////////////////////////////////////////////////////

void main(void)
{
  ………………………
  OSInit();
  ……………………
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
}   



/////////////////////////////////////////////////////////
void TaskStart (void *data)     
{
#if OS_CRITICAL_METHOD == 3                      
    OS_CPU_SR  cpu_sr;

     data = data;
   …………INSTALL uC/OS-II's clock……………………
   ………………………………
   …………
     OSStatInit();
     OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 1);
     OSTaskCreate(Task2, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 2);
  for(;;)
    {
     ……完成一些應用功能…………
     OSTimeDlyHMSM(0, 0, 1, 0);  
    }

      
}

//////////////////////////////////////////////////////////

void Task1(void *data)
{
    for(,,)
      {
        …………………………
      }
}

//////////////////////////////////////////////////////////

void Task2(void *data)
{
    for(,,)
      {
        …………………………
      }
}
/////////////////////////////////////////////////////////

在這個例子中,但統(tǒng)計任務完成初始化后又回到TaskStart,然后就開始創(chuàng)建Task1和Task2(當這2個任務一開始建立就處于就緒態(tài)),TaskStart自我延時一秒,開始運行Task1和Task2。假如這兩個任務要運行1秒(因為可能運行不到1秒,我考慮的是極端情況,假如有很多任務時就可能運行上1秒),當剛好運行完還沒來得及運行統(tǒng)計任務時又繼續(xù)運行
TaskStart這樣1秒后也沒有運行統(tǒng)計任務啊,這樣下去也很難保證每一秒運行一次統(tǒng)計任務。很多種情況都會遇到這種情況。我不是很能理解,是因為一般我情況下應用任務都很難運行到1秒嗎,這樣在每秒內(nèi)都能運行到統(tǒng)計任務,因為我剛才開始看UCOS2,沒有實際編程經(jīng)驗。請大家?guī)兔忉尮,謝謝!


3樓: >>參與討論
hailisky
問ucos2中的統(tǒng)計任務
好像統(tǒng)計任務是在其它任務執(zhí)行完時候進行計數(shù),


    CPU使用率=(1S可以產(chǎn)生的計數(shù)值-空閑時計數(shù)值)/1S可以產(chǎn)生的數(shù)值
而且在每一秒都應對空閑時計數(shù)值清0


4樓: >>參與討論
太陽草
問ucos2中的統(tǒng)計任務
   不好意思我在問哈:你的意思是說統(tǒng)計任務統(tǒng)計每秒CPU使用率是每秒對空閑時計數(shù)(這點我理解),而不是因為每秒都運行了統(tǒng)計任務?但如何能存儲前2秒用空閑時的值的,比如在前1秒內(nèi)的空閑計數(shù)已到但還沒能運行統(tǒng)計任務,那么這個計數(shù)值也還沒用,也還沒有清0,有怎么來繼續(xù)記錄下一秒的值呢。
   


5樓: >>參與討論
owenbatt
我也碰到類似的問題,下星期找人研究一下
沒想到uC/OS用的人還不少啊,哈哈

6樓: >>參與討論
太陽草
好的哈!
我也是剛接觸uC/OS,剛看完那本書!

7樓: >>參與討論
松鼠的大樹
首先明確一個原則
在實際的RT系統(tǒng)中,CPU大部分的時間實際上是處于空閑狀態(tài)的,應為只有這樣才能保證各個任務的實時性要求。這也是一個和非實時系統(tǒng)很明顯的不同特點。

考慮問題的時候應該基于這一個原則。

像太陽草在"再求"中提出的任務設置情況,嚴格得說是不明確的:
1.并沒有表明任務1、2的出發(fā)條件和等待條件,所以很難說什么時候他們會運行,運行多長時間;
2.你所說的“極端情況”是不適當?shù)摹R驗楦静荒芤?guī)定task1、2正好在TaskStart運行的間隙正好運行。如果真的可以這樣,他們就不應該是任務,而是兩個在TaskStart中調(diào)用的例程,這時,我只能說是你的任務設計不正確。

實際上你的問題牽扯到的問題很多,這里很難一一歷數(shù),建議你閱讀一些講解RT的概論性文章或書籍。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
新手求助-嵌入式系統(tǒng)
uCOS的任務鏈表為什么要做成雙向鏈表呢?
QT 和 MICROWIN適合MIPS嗎
uC/GUI 資料
關(guān)于顯示驅(qū)動的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號