資料介紹
1、概述
軟件定時器是一種軟件措施,通過它可以使一項特定的任務在給定的時間段后被執行。軟件定時器廣泛地應用于內核設計和應用程序設計中,例如,一個進程使用軟件定時器等待其他的進程完成特定的動作,以使任務間的操作同步等,因此,對軟件定時器的高效實現對提升系統的響應效率是至關重要的。
作為一種基礎的軟件措施,μC/OS-II[1]的 V2.86版本中增加了對軟件定時器的支持。使用μC/OS-II提供的軟件定時器,應用程序可以方便地完成特定的定時任務。本文對μC/OS-II的軟件定時器的實現機制進行簡要分析,然后提出了對μC/OS-II的軟件定時器的實現進行改進的方法。
2、μC/OS-II軟件定時器的實現機制及算法分析
2.1 μC/OS-II軟件定時器的核心數據結構
μC/OS-II實現軟件定時器的核心數據結構是 OS_TMR,其定義如下:
typedef struct os_tmr {
INT8U OSTmrType; /*應該設置為OS_TMR_TYPE*/
OS_TMR_CALLBACK OSTmrCallback; /*指定時間到達時要執行的回調函數*/
void *OSTmrCallbackArg; /*傳遞給回調函數的參數*/
void *OSTmrNext; /*軟件定時器鏈表管理指針*/
void *OSTmrPrev;
INT32U OSTmrMatch; /*當OSTmrTime == OSTmrMatch 時表示定時器時間到*/
INT32U OSTmrDly; /*對于周期性定時器,再次啟動定時器前的延時時間*/
INT32U OSTmrPeriod; /*對于周期性定時器,時鐘周期的長度*/
INT8U OSTmrOpt; /*選項 (如 OS_TMR_OPT_xxx 等) */
INT8U OSTmrState; /*定時器的狀態*/
} OS_TMR;
每個 OS_TMR結構的實例定義了一個軟件定時器,多個軟件定時器通過結構中的 OSTmrNext和 OSTmrPrev構成一個定時器雙向鏈表。
為了提高對軟件定時器的管理效率,μC/OS-II引入了“定時器輪”數據結構,所謂定時器輪,是將定時器實例中的 OSTmrMatch域的值參照某一個預先設計的數(稱為輪數)進行求余運算,并根據求余結果將定時器進行分組以改善對到期定時器的命中率。定時器輪數缺省配置如下:
typedef struct os_tmr_wheel {
OS_TMR *OSTmrFirst; /*指向第一定時器的指針*/
INT16U OSTmrEntries; /*該定時器輪中的定時器項數*/
} OS_TMR_WHEEL;
缺省配置下,μC/OS-II 定義的輪數為8,因此,μC/OS-II 的定時器輪為如下的一個數組:
OS_TMR_WHEEL OSTmrWheelTbl[8];
例如,在某一個特定的時刻,此處假設時刻5,系統中有定時時間為2ticks、4ticks、5ticks、32ticks、161ticks、357ticks的軟件定時器,那么,這些定時器將在時鐘滴答分別為7、9、10、37、166、362時到期,則此時系統的定時器輪的實例如圖 1所示:
2.2 μC/OS-II軟件定時器的處理算法分析
μC/OS-II對定時器的超時處理在一個稱為“uC/OS-II Tmr”的任務中進行,該任務是通過信號量 OSTmrSemSignal來激活。基于以上定義的定時器輪,μC/OS-II對定時器的處理算法如下:
static void OSTmr_Task (void *p_arg)
{
for(;;)
{
等待OSTmrSemSignal 信號量并獲得OSTmrWheelTbl 的訪問權;
STmrTime = OSTmrTime+1,并對8 求余后得到對應的定時器輪項索引index;
for OSTmrWheelTbl[index]定時器輪中的每一個定時器ptmr,do
{
if (OSTmrTime == ptmr-》OSTmrMatch) {
執行ptmr 軟件定時器中的回調函數;
對于單次定時器,從定時器輪中刪除該時鐘;
對于周期性定時器,則重置該定時器的OSTmrMatch 值;
}
}
釋放對OSTmrWheelTbl 的訪問權;
}
}
2.3 μC/OS-II的定時器處理算法的效率分析 采用上面的例子,對μC/OS-II的定時器處理算法效率進行一個簡單的分析:在下一次時鐘滴答,也就是時鐘滴答 6時,沒有定時器到期,而 for循環必須對每個時鐘進行檢查,類似的情況還發生在自時鐘到達 10以后的多個檢查中。根據系統中的定時器的數量,這種無謂的檢查將占用大量的 CPU時間。
軟件定時器是一種軟件措施,通過它可以使一項特定的任務在給定的時間段后被執行。軟件定時器廣泛地應用于內核設計和應用程序設計中,例如,一個進程使用軟件定時器等待其他的進程完成特定的動作,以使任務間的操作同步等,因此,對軟件定時器的高效實現對提升系統的響應效率是至關重要的。
作為一種基礎的軟件措施,μC/OS-II[1]的 V2.86版本中增加了對軟件定時器的支持。使用μC/OS-II提供的軟件定時器,應用程序可以方便地完成特定的定時任務。本文對μC/OS-II的軟件定時器的實現機制進行簡要分析,然后提出了對μC/OS-II的軟件定時器的實現進行改進的方法。
2、μC/OS-II軟件定時器的實現機制及算法分析
2.1 μC/OS-II軟件定時器的核心數據結構
μC/OS-II實現軟件定時器的核心數據結構是 OS_TMR,其定義如下:
typedef struct os_tmr {
INT8U OSTmrType; /*應該設置為OS_TMR_TYPE*/
OS_TMR_CALLBACK OSTmrCallback; /*指定時間到達時要執行的回調函數*/
void *OSTmrCallbackArg; /*傳遞給回調函數的參數*/
void *OSTmrNext; /*軟件定時器鏈表管理指針*/
void *OSTmrPrev;
INT32U OSTmrMatch; /*當OSTmrTime == OSTmrMatch 時表示定時器時間到*/
INT32U OSTmrDly; /*對于周期性定時器,再次啟動定時器前的延時時間*/
INT32U OSTmrPeriod; /*對于周期性定時器,時鐘周期的長度*/
INT8U OSTmrOpt; /*選項 (如 OS_TMR_OPT_xxx 等) */
INT8U OSTmrState; /*定時器的狀態*/
} OS_TMR;
每個 OS_TMR結構的實例定義了一個軟件定時器,多個軟件定時器通過結構中的 OSTmrNext和 OSTmrPrev構成一個定時器雙向鏈表。
為了提高對軟件定時器的管理效率,μC/OS-II引入了“定時器輪”數據結構,所謂定時器輪,是將定時器實例中的 OSTmrMatch域的值參照某一個預先設計的數(稱為輪數)進行求余運算,并根據求余結果將定時器進行分組以改善對到期定時器的命中率。定時器輪數缺省配置如下:
typedef struct os_tmr_wheel {
OS_TMR *OSTmrFirst; /*指向第一定時器的指針*/
INT16U OSTmrEntries; /*該定時器輪中的定時器項數*/
} OS_TMR_WHEEL;
缺省配置下,μC/OS-II 定義的輪數為8,因此,μC/OS-II 的定時器輪為如下的一個數組:
OS_TMR_WHEEL OSTmrWheelTbl[8];
例如,在某一個特定的時刻,此處假設時刻5,系統中有定時時間為2ticks、4ticks、5ticks、32ticks、161ticks、357ticks的軟件定時器,那么,這些定時器將在時鐘滴答分別為7、9、10、37、166、362時到期,則此時系統的定時器輪的實例如圖 1所示:
2.2 μC/OS-II軟件定時器的處理算法分析
μC/OS-II對定時器的超時處理在一個稱為“uC/OS-II Tmr”的任務中進行,該任務是通過信號量 OSTmrSemSignal來激活。基于以上定義的定時器輪,μC/OS-II對定時器的處理算法如下:
static void OSTmr_Task (void *p_arg)
{
for(;;)
{
等待OSTmrSemSignal 信號量并獲得OSTmrWheelTbl 的訪問權;
STmrTime = OSTmrTime+1,并對8 求余后得到對應的定時器輪項索引index;
for OSTmrWheelTbl[index]定時器輪中的每一個定時器ptmr,do
{
if (OSTmrTime == ptmr-》OSTmrMatch) {
執行ptmr 軟件定時器中的回調函數;
對于單次定時器,從定時器輪中刪除該時鐘;
對于周期性定時器,則重置該定時器的OSTmrMatch 值;
}
}
釋放對OSTmrWheelTbl 的訪問權;
}
}
2.3 μC/OS-II的定時器處理算法的效率分析 采用上面的例子,對μC/OS-II的定時器處理算法效率進行一個簡單的分析:在下一次時鐘滴答,也就是時鐘滴答 6時,沒有定時器到期,而 for循環必須對每個時鐘進行檢查,類似的情況還發生在自時鐘到達 10以后的多個檢查中。根據系統中的定時器的數量,這種無謂的檢查將占用大量的 CPU時間。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 詳解μC/OS-II在ARM平臺上移植 13次下載
- μC/OS-II 在Nios上的移植
- μC/OS-II在PC機上移植的設計與實現
- 基于ARM微處理器的μC/OS-II的移植研究
- 輕型PPP協議在μC/OS-II操作系統中的實現
- μC/OS-II 在LPC2210上的移植實現
- 嵌入式μC/OS-II在LPC2104上的移植及通信設計
- 基于μC/OS-II 的配電室監控終端的研究
- 在μC OS-II中實現同優先級調度的方法
- μC OS-II 中擴充任務數的方法
- μC OS-II 在Nios 上的移植1
- μC OS-II 在S3C44B0X 處理器上的移植
- 編寫μC OS-II 實時內核下的串行驅動
- μC/OS-II 任務調度機制的改進
- 基于μC/OS-II的嵌入式音頻系統設計
- 如何實現一個軟件定時器? 457次閱讀
- freeRTOS軟件定時器的使用 1845次閱讀
- 使用cola_os軟件定時器實現時間片輪詢框架 1274次閱讀
- 基于MC9S12DP256芯片和μC/OS-II實現CCP軟件的設計 2685次閱讀
- 基于嵌入式工控模塊和μC/OS-II實現車載狀態監控系統的設計 1907次閱讀
- 基于μC/OS-II操作系統實現在P89V51RD2微控制器上運行 747次閱讀
- 基于μC/OS-II操作系統在SPCE061A上的移植優化研研究 779次閱讀
- 基于μC/OS-II嵌入式系統開發中低功耗系統的設計 2984次閱讀
- 51單片機對μC/OS-II實時操作系統的移植 2385次閱讀
- LPC213X通過μC/OS-II的多種移植方案 621次閱讀
- 淺論uC/OS-II 在電動車電池管理系統中的應用研究 1313次閱讀
- μC/OS-II系統基礎嵌入式開發編程教程 4370次閱讀
- 基于LPC2365和嵌入式μC/OS-II下的多串口通信編程方法教程 2087次閱讀
- 利用μC/OS-II的嵌入式激光測距系統 1992次閱讀
- 用AndesCore N1033A-S處理器實現μC/OS-II的移植 3969次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多