電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>μC/OS-II的軟件定時(shí)器的改進(jìn)的方法

μC/OS-II的軟件定時(shí)器的改進(jìn)的方法

2017-10-31 | rar | 0.6 MB | 次下載 | 1積分

資料介紹

 1、概述
  軟件定時(shí)器是一種軟件措施,通過它可以使一項(xiàng)特定的任務(wù)在給定的時(shí)間段后被執(zhí)行。軟件定時(shí)器廣泛地應(yīng)用于內(nèi)核設(shè)計(jì)和應(yīng)用程序設(shè)計(jì)中,例如,一個(gè)進(jìn)程使用軟件定時(shí)器等待其他的進(jìn)程完成特定的動(dòng)作,以使任務(wù)間的操作同步等,因此,對(duì)軟件定時(shí)器的高效實(shí)現(xiàn)對(duì)提升系統(tǒng)的響應(yīng)效率是至關(guān)重要的。
  作為一種基礎(chǔ)的軟件措施,μC/OS-II[1]的 V2.86版本中增加了對(duì)軟件定時(shí)器的支持。使用μC/OS-II提供的軟件定時(shí)器,應(yīng)用程序可以方便地完成特定的定時(shí)任務(wù)。本文對(duì)μC/OS-II的軟件定時(shí)器的實(shí)現(xiàn)機(jī)制進(jìn)行簡(jiǎn)要分析,然后提出了對(duì)μC/OS-II的軟件定時(shí)器的實(shí)現(xiàn)進(jìn)行改進(jìn)的方法。
  2、μC/OS-II軟件定時(shí)器的實(shí)現(xiàn)機(jī)制及算法分析
  2.1 μC/OS-II軟件定時(shí)器的核心數(shù)據(jù)結(jié)構(gòu)
  μC/OS-II實(shí)現(xiàn)軟件定時(shí)器的核心數(shù)據(jù)結(jié)構(gòu)是 OS_TMR,其定義如下:
  typedef struct os_tmr {
  INT8U OSTmrType; /*應(yīng)該設(shè)置為OS_TMR_TYPE*/
  OS_TMR_CALLBACK OSTmrCallback; /*指定時(shí)間到達(dá)時(shí)要執(zhí)行的回調(diào)函數(shù)*/
  void *OSTmrCallbackArg; /*傳遞給回調(diào)函數(shù)的參數(shù)*/
  void *OSTmrNext; /*軟件定時(shí)器鏈表管理指針*/
  void *OSTmrPrev;
  INT32U OSTmrMatch; /*當(dāng)OSTmrTime == OSTmrMatch 時(shí)表示定時(shí)器時(shí)間到*/
  INT32U OSTmrDly; /*對(duì)于周期性定時(shí)器,再次啟動(dòng)定時(shí)器前的延時(shí)時(shí)間*/
  INT32U OSTmrPeriod; /*對(duì)于周期性定時(shí)器,時(shí)鐘周期的長(zhǎng)度*/
  INT8U OSTmrOpt; /*選項(xiàng) (如 OS_TMR_OPT_xxx 等) */
  INT8U OSTmrState; /*定時(shí)器的狀態(tài)*/
  } OS_TMR;
  每個(gè) OS_TMR結(jié)構(gòu)的實(shí)例定義了一個(gè)軟件定時(shí)器,多個(gè)軟件定時(shí)器通過結(jié)構(gòu)中的 OSTmrNext和 OSTmrPrev構(gòu)成一個(gè)定時(shí)器雙向鏈表。
  為了提高對(duì)軟件定時(shí)器的管理效率,μC/OS-II引入了“定時(shí)器輪”數(shù)據(jù)結(jié)構(gòu),所謂定時(shí)器輪,是將定時(shí)器實(shí)例中的 OSTmrMatch域的值參照某一個(gè)預(yù)先設(shè)計(jì)的數(shù)(稱為輪數(shù))進(jìn)行求余運(yùn)算,并根據(jù)求余結(jié)果將定時(shí)器進(jìn)行分組以改善對(duì)到期定時(shí)器的命中率。定時(shí)器輪數(shù)缺省配置如下:
  typedef struct os_tmr_wheel {
  OS_TMR *OSTmrFirst; /*指向第一定時(shí)器的指針*/
  INT16U OSTmrEntries; /*該定時(shí)器輪中的定時(shí)器項(xiàng)數(shù)*/
  } OS_TMR_WHEEL;
  缺省配置下,μC/OS-II 定義的輪數(shù)為8,因此,μC/OS-II 的定時(shí)器輪為如下的一個(gè)數(shù)組:
  OS_TMR_WHEEL OSTmrWheelTbl[8];
  例如,在某一個(gè)特定的時(shí)刻,此處假設(shè)時(shí)刻5,系統(tǒng)中有定時(shí)時(shí)間為2ticks、4ticks、5ticks、32ticks、161ticks、357ticks的軟件定時(shí)器,那么,這些定時(shí)器將在時(shí)鐘滴答分別為7、9、10、37、166、362時(shí)到期,則此時(shí)系統(tǒng)的定時(shí)器輪的實(shí)例如圖 1所示:
  μC/OS-II的軟件定時(shí)器的改進(jìn)的方法
  2.2 μC/OS-II軟件定時(shí)器的處理算法分析
  μC/OS-II對(duì)定時(shí)器的超時(shí)處理在一個(gè)稱為“uC/OS-II Tmr”的任務(wù)中進(jìn)行,該任務(wù)是通過信號(hào)量 OSTmrSemSignal來激活?;谝陨隙x的定時(shí)器輪,μC/OS-II對(duì)定時(shí)器的處理算法如下:
  static void OSTmr_Task (void *p_arg)
  {
  for(;;)
  {
  等待OSTmrSemSignal 信號(hào)量并獲得OSTmrWheelTbl 的訪問權(quán);
  STmrTime = OSTmrTime+1,并對(duì)8 求余后得到對(duì)應(yīng)的定時(shí)器輪項(xiàng)索引index;
  for OSTmrWheelTbl[index]定時(shí)器輪中的每一個(gè)定時(shí)器ptmr,do
  {
  if (OSTmrTime == ptmr-》OSTmrMatch) {
  執(zhí)行ptmr 軟件定時(shí)器中的回調(diào)函數(shù);
  對(duì)于單次定時(shí)器,從定時(shí)器輪中刪除該時(shí)鐘;
  對(duì)于周期性定時(shí)器,則重置該定時(shí)器的OSTmrMatch 值;
  }
  }
  釋放對(duì)OSTmrWheelTbl 的訪問權(quán);
  }
  }
  2.3 μC/OS-II的定時(shí)器處理算法的效率分析 采用上面的例子,對(duì)μC/OS-II的定時(shí)器處理算法效率進(jìn)行一個(gè)簡(jiǎn)單的分析:在下一次時(shí)鐘滴答,也就是時(shí)鐘滴答 6時(shí),沒有定時(shí)器到期,而 for循環(huán)必須對(duì)每個(gè)時(shí)鐘進(jìn)行檢查,類似的情況還發(fā)生在自時(shí)鐘到達(dá) 10以后的多個(gè)檢查中。根據(jù)系統(tǒng)中的定時(shí)器的數(shù)量,這種無謂的檢查將占用大量的 CPU時(shí)間。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)