新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式時鐘管理器的設計與實現(xiàn)

        嵌入式時鐘管理器的設計與實現(xiàn)

        作者: 時間:2018-09-11 來源:網(wǎng)絡 收藏

        本文引用地址:http://www.104case.com/article/201809/388832.htm

          RTX_EXIT_CRITICAL();//退出臨界區(qū)

          returnOK;//定時器啟動成功

          }

          }

          returnERROR;//給定定時器ID無效

          }

          調用該接口函數(shù),即可啟動已創(chuàng)建(wdCreate)的軟件定時器。當經(jīng)歷ticks節(jié)拍后,給定函數(shù)wdr將被執(zhí)行,以完成用戶的定時需求。

          (2)定時器守護例程

          

          定時器守護例程wdDaemon被置于前述的鉤子函數(shù)clkTick_ISR_hook中,以使其周期性執(zhí)行。由于本例程自身的特點,它應作為clkTick_ISR_hook的最后一個調用函數(shù)。本例程是軟件定時器實現(xiàn)的核心,而其關鍵又是對系統(tǒng)棧的調整,為說明其實現(xiàn)流程,給出了如圖2所示的wdDaemon的棧(stack)結構。

          由圖2可知:wdDaemon的返回地址沒有入棧,因其為clkTick_ISR_hook中的最后一個函數(shù)調用,故其返回地址被優(yōu)化掉。wdDaemon將棧頂?shù)?B數(shù)據(jù)上移2B,然后將定時器指定函數(shù)的地址插入騰出的棧空間(2B)中。如此,該地址將會被IRET彈入IP中。由于IRET指令的執(zhí)行而使中斷系統(tǒng)復位以重新響應外部中斷,同時也使定時器指定函數(shù)在非中斷態(tài)執(zhí)行,從而不過分影響系統(tǒng)的響應速度。

          2.3.2 delta列表法

          delta列表法僅維護有效定時器的鏈表,且鏈表中的定時器結點按定時剩余時間由小到大排列,使距timeout點最近的定時器作為鏈表的首結點。鏈表中定時器結點的順序由其獨特的結點插入算法決定:如有5個定時器,其定時長度分別為10、14、21、32和39,當其組成delta列表時,定時值最小的結點為首結點,其定時存儲值為10,而后依序排列,其定時存儲值分別為4、7、11、7,即后一個定時器的定時存儲值由自己的實際定時值與相鄰的前一個定時器的實際定時值相減而得。可見,除首結點外的所有定時器的計數(shù)操作在其插入delta列表時就已完成。因而當定時器守護例程確定timeout的定時器時,只需對首結點進行減1或刪除的操作,而不需遍歷整個列表,從而使delta列表的操作與定時器數(shù)量無關。這使delta列表法在大量定時器管理中大顯其能。

          該法在系統(tǒng)中實現(xiàn)的數(shù)據(jù)結構為一靜態(tài)雙向鏈表:

          structwdNode{

          BOOLflag;

          UINT16ticks;

          VOIDFUNCPTRrout;



        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 兴城市| 东阳市| 清苑县| 汤原县| 社会| 宜兰市| 新邵县| 桓仁| 阳谷县| 改则县| 文登市| 合川市| 久治县| 鹿泉市| 海淀区| 无为县| 阳信县| 和静县| 澄江县| 霍城县| 锡林浩特市| 内乡县| 来安县| 濮阳市| 万年县| 青田县| 抚顺县| 斗六市| 南漳县| 平遥县| 武胜县| 高淳县| 湄潭县| 富阳市| 周至县| 夏邑县| 化州市| 绥德县| 通化县| 泰来县| 凭祥市|