999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種高效軟件定時(shí)器的設(shè)計(jì)與實(shí)現(xiàn)

2015-12-23 00:52:08秦玉蒙王婭男邱春玲
實(shí)驗(yàn)室研究與探索 2015年9期
關(guān)鍵詞:單片機(jī)

秦玉蒙, 王婭男, 邱春玲

(吉林大學(xué) 儀器科學(xué)與電氣工程學(xué)院,吉林 長春130026)

0 引 言

在單片機(jī)開發(fā)系統(tǒng)中,經(jīng)常用到定時(shí)控制,比如延遲控制、超時(shí)控制和計(jì)時(shí)控制等。尤其是多任務(wù)處理中,對(duì)定時(shí)的需求很大。為了獲得所需要的定時(shí),需求準(zhǔn)確而穩(wěn)定的時(shí)間基準(zhǔn),產(chǎn)生這種時(shí)間準(zhǔn)確通常有兩種方法:硬件定時(shí)器和軟件定時(shí)器。

單片機(jī)都含有硬件定時(shí)器,它通過對(duì)時(shí)鐘脈沖的計(jì)數(shù)實(shí)現(xiàn)定時(shí),定時(shí)準(zhǔn)確,使用方便,但是單片機(jī)內(nèi)部的硬件定時(shí)器數(shù)量有限,軟件定時(shí)器應(yīng)運(yùn)而生,它以硬件定時(shí)器的定時(shí)中斷為基礎(chǔ),利用軟件方法來實(shí)現(xiàn),定時(shí)更長,使用更靈活。

在應(yīng)用單片機(jī)進(jìn)行多任務(wù)系統(tǒng)開發(fā)時(shí),定時(shí)器工作方式復(fù)雜,受限于單片機(jī)內(nèi)部資源數(shù)量,實(shí)時(shí)操作系統(tǒng)中的軟件定時(shí)器無法直接套用;多人開發(fā)時(shí),代碼風(fēng)格因人而異,定時(shí)器的管理無法統(tǒng)一,給多人協(xié)作開發(fā)和后期維護(hù)帶來了不便。因此,設(shè)計(jì)并實(shí)現(xiàn)一種軟件定時(shí)器,在單個(gè)硬件定時(shí)器上實(shí)現(xiàn)了多個(gè)軟件定時(shí)器,代碼經(jīng)過封裝標(biāo)準(zhǔn)化,并根據(jù)單片機(jī)的特性進(jìn)行了優(yōu)化,可作為一個(gè)獨(dú)立模塊嵌入到單片機(jī)軟件系統(tǒng)中;所有代碼都符合ANSI-C 標(biāo)準(zhǔn),易讀易用,在多任務(wù)系統(tǒng)開發(fā)中可以大大簡化軟件設(shè)計(jì)復(fù)雜性,方便多人協(xié)作開發(fā)和后期維護(hù)。

1 高效軟件定時(shí)器的設(shè)計(jì)

在實(shí)時(shí)操作系統(tǒng)中,硬件定時(shí)器以固定的頻率運(yùn)行,形成周期性的中斷,稱之為“時(shí)鐘節(jié)拍”[1-7]。本軟件定時(shí)器以時(shí)鐘節(jié)拍為定時(shí)基準(zhǔn)源,通過軟件計(jì)數(shù)的方式實(shí)現(xiàn)對(duì)時(shí)鐘節(jié)拍的累計(jì),當(dāng)達(dá)到預(yù)設(shè)值時(shí),執(zhí)行預(yù)設(shè)任務(wù)。

本軟件定時(shí)器模塊由函數(shù)、數(shù)據(jù)結(jié)構(gòu)和宏組成,可作為一個(gè)獨(dú)立模塊嵌入到單片機(jī)軟件架構(gòu)中,如圖1所示。硬件定時(shí)器驅(qū)動(dòng)層為軟件定時(shí)器提供穩(wěn)定的時(shí)鐘節(jié)拍,驅(qū)動(dòng)處理算法有序運(yùn)行。由于單片機(jī)的RAM容量有限,動(dòng)態(tài)鏈表作數(shù)據(jù)結(jié)構(gòu)顯然很不適合,選用數(shù)組、輔助變量和宏定義配合的方式作為數(shù)據(jù)結(jié)構(gòu),既滿足了軟件定時(shí)器數(shù)量可控,又滿足了動(dòng)態(tài)使用需求。接口函數(shù)統(tǒng)一管理所有軟件定時(shí)器,方便使用。此外,考慮到數(shù)據(jù)臨界態(tài)和用戶輸入的不確定性,添加了加鎖保護(hù)和輸入校驗(yàn),提高了軟件的魯棒性[8-10]。

圖1 軟件定時(shí)器模塊架構(gòu)

2 高效軟件定時(shí)器的實(shí)現(xiàn)

2.1 高效軟件定時(shí)器的數(shù)據(jù)結(jié)構(gòu)

由于軟件定時(shí)器數(shù)量較多,所以為軟件定時(shí)器設(shè)計(jì)了一個(gè)核心數(shù)據(jù)結(jié)構(gòu)SoftwareTimer,其定義如下:

每個(gè)SoftwareTimer 結(jié)構(gòu)的實(shí)例定義了一個(gè)軟件定時(shí)器。其中:Count 用于設(shè)置時(shí)鐘節(jié)拍計(jì)數(shù)值;CallBackFuction 是計(jì)時(shí)時(shí)間到后執(zhí)行的回調(diào)函數(shù)指針,其類型為函數(shù)指針類型,對(duì)function 的定義如下:

typedef void (* function )(void );

本軟件定時(shí)器數(shù)量缺省配置為8,通過數(shù)組進(jìn)行管理,其定義如下:

struct SoftwareTimer Block[Sum];

define Sum 8 //軟件定時(shí)器數(shù)量

雖然軟件定時(shí)器從存儲(chǔ)結(jié)構(gòu)上是靜態(tài)的,但是在設(shè)計(jì)時(shí)考慮到動(dòng)態(tài)使用的需求,將軟件定時(shí)器設(shè)計(jì)為先激活后使用,用完即回收。因此,定義了一個(gè)就緒表變量,用來標(biāo)記8 個(gè)定時(shí)器的ID 號(hào)和工作狀態(tài),其定義如下:

uchar State = 0;

2.2 高效軟件定時(shí)器的處理算法

軟件定時(shí)器的處理算法在時(shí)鐘節(jié)拍內(nèi)執(zhí)行,其軟件流程圖如圖2 所示,在時(shí)鐘節(jié)拍中,對(duì)已開啟的軟件定時(shí)器的時(shí)鐘節(jié)拍計(jì)數(shù)值減1,并判斷時(shí)鐘節(jié)拍計(jì)數(shù)值是否溢出,如果溢出,表明定時(shí)時(shí)間到,立即執(zhí)行回調(diào)函數(shù),并更新就緒表,在操作就緒表時(shí),不允許有更高級(jí)的中斷進(jìn)入操作軟件定時(shí)器,所以在處理過程中需要加鎖保護(hù)。本軟件定時(shí)器的處理算法通過函數(shù)TimerTickTask 實(shí)現(xiàn),通過此函數(shù)對(duì)已開啟的軟件定時(shí)器進(jìn)行上述處理,其代碼定義如下:

圖2 軟件定時(shí)器處理算法流程圖

2.3 高效軟件定時(shí)器的接口函數(shù)

本軟件定時(shí)器提供了標(biāo)準(zhǔn)的接口函數(shù),軟件定時(shí)器接口函數(shù)包括軟件定時(shí)器啟動(dòng)函數(shù)SoftwareTimerStart 和軟件定時(shí)器關(guān)閉函數(shù)SoftwareTimerStop。SoftwareTimerStart 函數(shù)流程如圖3所示,通過該函數(shù)可以開啟一個(gè)軟件定時(shí)器,如果無可用軟件定時(shí)器,即開啟失敗,返回錯(cuò)誤碼。如果開啟成功,進(jìn)行時(shí)鐘節(jié)拍計(jì)數(shù)值和回調(diào)函數(shù)初始化,并把該軟件定時(shí)器在就緒表中的位置作為ID 號(hào)返回。

圖3 啟動(dòng)流程圖

通過SoftwareTimerStop 函數(shù)可以對(duì)該軟件定時(shí)器進(jìn)行關(guān)閉操作,并返回已計(jì)量的時(shí)鐘節(jié)拍數(shù),其執(zhí)行流程如圖4 所示。

圖4 關(guān)閉流程圖

注意,軟件定時(shí)器受時(shí)鐘節(jié)拍驅(qū)動(dòng),節(jié)拍精度直接影響軟件定時(shí)器的精度。回調(diào)函數(shù)直接在時(shí)鐘節(jié)拍中運(yùn)行,如果回調(diào)函數(shù)執(zhí)行時(shí)間超過時(shí)鐘節(jié)拍間隔時(shí)長,就會(huì)造成后續(xù)節(jié)拍的滯后,不僅影響定時(shí)精度,而且影響系統(tǒng)正常運(yùn)行。所以回調(diào)函數(shù)的執(zhí)行時(shí)間不能超過時(shí)鐘節(jié)拍間隔時(shí)長,如果回調(diào)函數(shù)需要較長時(shí)間運(yùn)行,可以在回調(diào)函數(shù)中置位一個(gè)標(biāo)志位,在大循環(huán)中掃描該標(biāo)志位執(zhí)行所需任務(wù)。

3 實(shí)驗(yàn)結(jié)果

3.1 誤差分析

軟件定時(shí)器開啟和關(guān)閉的理想時(shí)間段為時(shí)鐘節(jié)拍所用硬件定時(shí)器的中斷處理函數(shù)執(zhí)行期間[11-12]。但實(shí)際上軟件定時(shí)器的開啟和關(guān)閉時(shí)刻是隨機(jī)的,在操作某個(gè)軟件定時(shí)器時(shí),由于開啟時(shí)刻和關(guān)閉時(shí)刻與時(shí)鐘節(jié)拍沒有對(duì)準(zhǔn),會(huì)存在誤差,且其值可能是一個(gè)時(shí)鐘節(jié)拍內(nèi)的任意值,該誤差稱為啟動(dòng)誤差和關(guān)閉誤差。如圖5 所示,時(shí)刻1 和時(shí)刻3 為時(shí)鐘節(jié)拍所用硬件定時(shí)器的中斷處理起始時(shí)刻。如果在時(shí)刻2 開啟了一個(gè)軟件定時(shí)器,其啟動(dòng)誤差即為時(shí)刻1 與時(shí)刻2 之間的時(shí)間差值。如果在時(shí)刻4 停止了該軟件定時(shí)器,其關(guān)閉誤差即為時(shí)刻3 與時(shí)刻4 之間的時(shí)間差值。

圖5 誤差分析

啟動(dòng)誤差和關(guān)閉誤差無法完全消除,可以采用更快的時(shí)鐘節(jié)拍來減小誤差,但是這樣會(huì)導(dǎo)致CPU 頻繁進(jìn)出中斷,CPU 利用率不高,應(yīng)根據(jù)實(shí)際應(yīng)用的需要,選擇合適的時(shí)鐘節(jié)拍,將這兩種誤差控制在可接受的范圍內(nèi)。

3.2 性能測試

在基于時(shí)鐘節(jié)拍的前后臺(tái)軟件架構(gòu)中,兩個(gè)時(shí)鐘節(jié)拍之間的時(shí)間間隔稱為“時(shí)間片”[13],為了分析軟件定時(shí)器的算法效率,以“時(shí)間片占用率”來進(jìn)行衡量。可以根據(jù)時(shí)間片占用率及應(yīng)用需求設(shè)定合適的時(shí)鐘節(jié)拍,獲取更高的定時(shí)精度[14-16]。

時(shí)間片占用率 = TimerTickTask 函數(shù)運(yùn)行時(shí)間/時(shí)間片。

測試環(huán)境:Keil C51 V4.11,芯片類型AT89C55,時(shí)鐘頻率設(shè)置為24 MHz。

測試方法:時(shí)間片設(shè)置為5 ms。在開啟時(shí)鐘節(jié)拍所用硬件定時(shí)器之前,開啟軟件定時(shí)器,定時(shí)時(shí)間設(shè)置為5 ms,回調(diào)函數(shù)為空函數(shù)。時(shí)鐘節(jié)拍中只有TimerTickTask 函數(shù)。使用KEIL 軟件仿真得到測試結(jié)果如表1 所示。

由測試結(jié)果可知,每增加一個(gè)軟件定時(shí)器,TimerTickTask 函數(shù)運(yùn)行時(shí)間增加約為45 μs,時(shí)間片占用率增加約為0.9%;AT89C55 在24 MHz 時(shí)鐘下的指令處理速度為2 MIPS,性能有限,在8 個(gè)軟件定時(shí)器全部開啟的極端情況下,時(shí)間片占用率不到8%,可見該軟件定時(shí)器算法具有較高的執(zhí)行效率。在更高級(jí)的單片機(jī)中可將時(shí)間片進(jìn)一步縮小,保證性能的同時(shí)可獲得更高的定時(shí)精度。

表1 性能測試

4 應(yīng)用舉例

本軟件定時(shí)器使用靈活,應(yīng)用場合廣泛,例如,按鍵音、串口讀超時(shí)判斷和界面顯示超時(shí)判斷等。如果兩個(gè)軟件定時(shí)器嵌套使用,還可實(shí)現(xiàn)不等長度的周期性定時(shí)。

4.1 串口讀超時(shí)判斷

在單片機(jī)開發(fā)系統(tǒng),尤其是51 內(nèi)核單片機(jī),在串口開發(fā)中,需要一個(gè)硬件定時(shí)器提供波特率,還需要一個(gè)硬件定時(shí)器用于串口讀超時(shí)判斷,造成硬件定時(shí)器資源緊張,本軟件定時(shí)器可以很好解決這個(gè)問題,首先根據(jù)需要編寫ReadTimerOut 函數(shù),此函數(shù)時(shí)是在串口讀超時(shí)后要執(zhí)行的任務(wù)。設(shè)時(shí)間片為1 ms,串口數(shù)據(jù)流中斷10 ms 即認(rèn)為超時(shí),其判斷代碼如下:

在上述代碼中TimerID 變量有兩個(gè)作用,一是記錄定時(shí)器ID,二是用來判斷串口數(shù)據(jù)流的起始字節(jié)。如果是起始字節(jié),開啟一個(gè)軟件定時(shí)器,再次讀串口時(shí)關(guān)閉上一次開啟的軟件定時(shí)器,開啟一個(gè)軟件定時(shí)器重新開始計(jì)時(shí)。

4.2 軟件定時(shí)器嵌套

本軟件定時(shí)器靈活使用,會(huì)把復(fù)雜設(shè)計(jì)變得簡單,在工控領(lǐng)域,經(jīng)過用到不等長周期性定時(shí)用于測試設(shè)備。設(shè)時(shí)間片為1 ms,利用本軟件定時(shí)器實(shí)現(xiàn)工作1 s停3 s 這樣的不等長周期性定時(shí)的代碼如下:

TaskStart 函數(shù)開啟任務(wù)后,開啟一個(gè)軟件定時(shí)器,定時(shí)1 s 后回調(diào)TaskSop 函數(shù),TaskSop 函數(shù)關(guān)閉任務(wù),開啟一個(gè)軟件定時(shí)器,定時(shí)3 s 后調(diào)TaskStart 函數(shù)。如此循環(huán)嵌套實(shí)現(xiàn)所需功能。

5 結(jié) 語

將實(shí)時(shí)操作系統(tǒng)中的定時(shí)器軟件管理思想引入單片機(jī)前后臺(tái)軟件架構(gòu)中,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)軟件定時(shí)器模塊,本模塊邏輯清楚,分層設(shè)計(jì),并針對(duì)單片機(jī)進(jìn)行了特殊優(yōu)化;采用動(dòng)態(tài)激活的方式使用,軟件定時(shí)器用完即回收,便于重復(fù)使用。誤差分析和性能測試表明本軟件定時(shí)器實(shí)用高效。利用本軟件定時(shí)器開發(fā)多任務(wù)系統(tǒng),不僅可以節(jié)約硬件定時(shí)器資源,而且可以大大加快單片機(jī)系統(tǒng)的開發(fā)進(jìn)程。

[1] Labrosse J. Inside Real-Time Kernels[C]//Conference Proceedings of Embedded Systems Conference East. 1997:205-214.

[2] Labrosse J J. Microc/OS-II[M]. R & D Books,1998.

[3] Krishna C M. Real ‐ Time Systems[M]. John Wiley & Sons,Inc.,1999.

[4] Pont M J. Patterns for time-triggered embedded systems[J]. New York:Person Edueation,2001.

[5] Dick R P,Lakshminarayana G,Raghunathan A,et al. Analysis of power dissipation in embedded systems using real-time operating systems[J]. Computer-Aided Design of Integrated Circuits and Systems,IEEE Transactions on,2003,22(5):615-627.

[6] 李小群,趙慧斌,葉以民,等. RFRTOS:基于Linux 的實(shí)時(shí)操作系統(tǒng)[J].軟件學(xué)報(bào),2003,14(7):203-1212.

[7] Love R,Are S H W,Linus A C,et al. Linux Kernel Development Second Edition[M]. 2004.

[8] 李 凡,盧社階,邱 鵬,等. 在嵌入式應(yīng)用中增強(qiáng)Linux 實(shí)時(shí)性的方法研究[J]. 華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2005,33(2):82-85.

[9] 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京:清華大學(xué)出版社,1992.

[10] Shaffer C A. Solutions Manual:A Practical Introduction to Data Structures and Algorithm Analysis[M]. N. J.:Prentice Hall,1997.

[11] 趙 霞,郭 耀,雷志勇,等. 基于模擬器的嵌入式操作系統(tǒng)能耗估算與分析[J]. 電子學(xué)報(bào),2008,36(2):209-215.

[12] 周 博,王石記,邱衛(wèi)東,等. SHUM-UCOS:基于統(tǒng)一多任務(wù)模型可重構(gòu)系統(tǒng)的實(shí)時(shí)操作系統(tǒng)[J]. 計(jì)算機(jī)學(xué)報(bào),2006,29(2):208-218.

[13] 徐久強(qiáng),劉 輝,朱 劍,等. 一種基于時(shí)間片的搶占控制模型[J]. 東北大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,11:1570-1573.

[14] 陳 俐,殷承良. 基于混合定時(shí)調(diào)度的車輛AMT 控制系統(tǒng)的實(shí)時(shí)性分析[J]. 上海交通大學(xué)學(xué)報(bào),2008,41(2):256-261.

[15] 郭占社,孟永鋼,蘇才鈞. 基于Windows 的精確定時(shí)技術(shù)及其在工程中的應(yīng)用[J]. 哈爾濱工業(yè)大學(xué)學(xué)報(bào),2005,37(12):1717-1720.

[16] Holenderski M,van den Heuvel M,Bril R J,et al. Grasp:Tracing,visualizing and measuring the behavior of real-time systems[C]//International Workshop on Analysis Tools and Methodologies for Embedded and Real-time Systems (WATERS). 2010:37-42.

猜你喜歡
單片機(jī)
基于單片機(jī)的SPWM控制逆變器的設(shè)計(jì)與實(shí)現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機(jī)的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機(jī)的多功能智能插排
電子制作(2019年11期)2019-07-04 00:34:48
基于單片機(jī)的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機(jī)之間的串行通信及應(yīng)用
電子制作(2018年12期)2018-08-01 00:48:04
MSP430單片機(jī)在仿真中要注意的幾點(diǎn)問題
電子制作(2017年9期)2017-04-17 03:00:53
基于單片機(jī)的平衡控制系統(tǒng)設(shè)計(jì)
電子制作(2017年19期)2017-02-02 07:08:27
基于單片機(jī)的三維LED點(diǎn)陣設(shè)計(jì)
電子制作(2016年21期)2016-05-17 03:52:51
Microchip推出兩個(gè)全新PIC單片機(jī)系列
基于Proteus的單片機(jī)控制系統(tǒng)的仿真設(shè)計(jì)
主站蜘蛛池模板: 中文字幕欧美日韩高清| 国产XXXX做受性欧美88| 欧美一级大片在线观看| 看你懂的巨臀中文字幕一区二区| 99热这里只有成人精品国产| 精品国产免费第一区二区三区日韩| 特级精品毛片免费观看| 欧美亚洲日韩中文| 国产区精品高清在线观看| 久精品色妇丰满人妻| 国产精品永久在线| 亚洲福利网址| 欧美中文字幕一区| 日本草草视频在线观看| 国产成人亚洲无吗淙合青草| 婷婷色一二三区波多野衣| 亚洲人成在线精品| 尤物特级无码毛片免费| 2020最新国产精品视频| 国产国语一级毛片在线视频| 亚洲精品第1页| 蜜臀AV在线播放| 欧美成人日韩| 国产清纯在线一区二区WWW| 操操操综合网| 亚洲欧美极品| 日韩亚洲综合在线| 亚洲欧美极品| 婷婷亚洲视频| 午夜电影在线观看国产1区| 视频二区中文无码| 综合久久久久久久综合网| 欧美成人午夜在线全部免费| 青青青视频91在线 | 国产无码性爱一区二区三区| 成人免费视频一区| 丁香亚洲综合五月天婷婷| 日本一本在线视频| 免费看a毛片| 91 九色视频丝袜| 亚洲国产av无码综合原创国产| 久热re国产手机在线观看| 国产亚洲高清在线精品99| 亚洲中文精品久久久久久不卡| 东京热av无码电影一区二区| 日韩欧美中文在线| 四虎免费视频网站| 婷婷开心中文字幕| 黄色网在线免费观看| 亚洲男人的天堂网| 亚洲中文久久精品无玛| 国产99在线| 最新亚洲人成网站在线观看| 亚洲精品午夜天堂网页| 色婷婷亚洲十月十月色天| 色男人的天堂久久综合| 亚洲人成电影在线播放| 久青草国产高清在线视频| 中文字幕 日韩 欧美| 2021无码专区人妻系列日韩| 成人精品亚洲| 无码专区国产精品第一页| 亚洲第一成人在线| 亚洲国产91人成在线| 亚洲国产精品无码久久一线| 日韩无码精品人妻| 无码啪啪精品天堂浪潮av| 亚洲中文精品久久久久久不卡| 亚洲精品手机在线| AV熟女乱| 在线国产毛片手机小视频| 精品国产美女福到在线直播| 中文字幕无码av专区久久| 第九色区aⅴ天堂久久香| 欧美综合区自拍亚洲综合天堂 | 亚州AV秘 一区二区三区| 日韩在线1| 毛片免费视频| 国产成人AV综合久久| 亚洲中文字幕在线观看| 亚洲h视频在线| 福利片91|