資料介紹
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所示:
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í)間。
軟件定時(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所示:
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í)間。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 詳解μC/OS-II在ARM平臺(tái)上移植 13次下載
- μC/OS-II 在Nios上的移植
- μC/OS-II在PC機(jī)上移植的設(shè)計(jì)與實(shí)現(xiàn)
- 基于ARM微處理器的μC/OS-II的移植研究
- 輕型PPP協(xié)議在μC/OS-II操作系統(tǒng)中的實(shí)現(xiàn)
- μC/OS-II 在LPC2210上的移植實(shí)現(xiàn)
- 嵌入式μC/OS-II在LPC2104上的移植及通信設(shè)計(jì)
- 基于μC/OS-II 的配電室監(jiān)控終端的研究
- 在μC OS-II中實(shí)現(xiàn)同優(yōu)先級(jí)調(diào)度的方法
- μC OS-II 中擴(kuò)充任務(wù)數(shù)的方法
- μC OS-II 在Nios 上的移植1
- μC OS-II 在S3C44B0X 處理器上的移植
- 編寫μC OS-II 實(shí)時(shí)內(nèi)核下的串行驅(qū)動(dòng)
- μC/OS-II 任務(wù)調(diào)度機(jī)制的改進(jìn)
- 基于μC/OS-II的嵌入式音頻系統(tǒng)設(shè)計(jì)
- 如何實(shí)現(xiàn)一個(gè)軟件定時(shí)器? 457次閱讀
- freeRTOS軟件定時(shí)器的使用 1845次閱讀
- 使用cola_os軟件定時(shí)器實(shí)現(xiàn)時(shí)間片輪詢框架 1274次閱讀
- 基于MC9S12DP256芯片和μC/OS-II實(shí)現(xiàn)CCP軟件的設(shè)計(jì) 2685次閱讀
- 基于嵌入式工控模塊和μC/OS-II實(shí)現(xiàn)車載狀態(tài)監(jiān)控系統(tǒng)的設(shè)計(jì) 1907次閱讀
- 基于μC/OS-II操作系統(tǒng)實(shí)現(xiàn)在P89V51RD2微控制器上運(yùn)行 747次閱讀
- 基于μC/OS-II操作系統(tǒng)在SPCE061A上的移植優(yōu)化研研究 779次閱讀
- 基于μC/OS-II嵌入式系統(tǒng)開發(fā)中低功耗系統(tǒng)的設(shè)計(jì) 2984次閱讀
- 51單片機(jī)對(duì)μC/OS-II實(shí)時(shí)操作系統(tǒng)的移植 2385次閱讀
- LPC213X通過μC/OS-II的多種移植方案 621次閱讀
- 淺論uC/OS-II 在電動(dòng)車電池管理系統(tǒng)中的應(yīng)用研究 1313次閱讀
- μC/OS-II系統(tǒng)基礎(chǔ)嵌入式開發(fā)編程教程 4370次閱讀
- 基于LPC2365和嵌入式μC/OS-II下的多串口通信編程方法教程 2087次閱讀
- 利用μC/OS-II的嵌入式激光測(cè)距系統(tǒng) 1992次閱讀
- 用AndesCore N1033A-S處理器實(shí)現(xiàn)μC/OS-II的移植 3969次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多