最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

嵌入式軟件實現(xiàn)定時器的兩種方式

2023-06-13 16:55 作者:補給站Linux內(nèi)核  | 我要投稿

簡介

在一般的嵌入式產(chǎn)品設(shè)計中,介于成本、功耗等,所選型的MCU基本都是資源受限的,而里面的定時器的數(shù)量更是有限。在我們軟件設(shè)計中往往有多種定時需求,例如脈沖輸出、按鍵檢測、LCD切屏延時等等 ,我們不可能讓每一個定時業(yè)務(wù)都去開一個硬件定時器,一來硬件資源可能不足,二來會使軟件過度依賴于硬件平臺,從而導(dǎo)致較差的可移植性。

如果我們有一個軟件定時器,所有定時業(yè)務(wù)都依賴于軟件定時器,不僅節(jié)省硬件資源,以后在移植的時候也只需要將軟件定時器和硬件相關(guān)的部分修改就行了,其他部分都不用動。

軟件定時器實現(xiàn)方式:

一、用結(jié)構(gòu)體數(shù)組的方式實現(xiàn)軟件定時器

用結(jié)構(gòu)體數(shù)組的方式實現(xiàn)起來較簡單,也容易理解,除此之外與之后的鏈表實現(xiàn)方式比起來沒有其他優(yōu)點。

但還是介紹一下實現(xiàn)方法:在結(jié)構(gòu)體數(shù)組內(nèi)定義一個start標(biāo)志和定時時長duration,還有一個為計數(shù)值count,這3個變量為最基本的3個變量,其他的可以自己補充,比如運行模式、回調(diào)函數(shù)指針等。還有就是每一個結(jié)構(gòu)體數(shù)組就是一個定時器,需要我們提前定義好這個結(jié)構(gòu)體數(shù)組有多大。

定義好之后,在開啟定時器的時候我們將對應(yīng)的數(shù)組內(nèi)start標(biāo)志置位,在硬件tick中斷服務(wù)函數(shù)里面我們?nèi)ゲ樗薪Y(jié)構(gòu)體數(shù)組內(nèi)的start標(biāo)志是否置位,當(dāng)查到當(dāng)前start被置位時,將此數(shù)組內(nèi)的duration和count做比較,如果相等就說明此定時器定時時間到了,如果不等就將count++,然后接著查其他數(shù)組的start標(biāo)志,以此無限循環(huán)。

此種方式缺點非常明顯,那就是在硬件tick中斷服務(wù)函數(shù)內(nèi),我們得輪詢所有數(shù)組,如果我們軟件業(yè)務(wù)需求是20個定時任務(wù),那我們就得在軟件定時器的實現(xiàn)里定義20個數(shù)組,空間浪費倒是其次的,關(guān)鍵是硬件tick輪詢的數(shù)組越多,執(zhí)行到某個數(shù)組的時間就越長,若以后有50個、100個定時需求時,將會導(dǎo)致定時時間極不精準(zhǔn)。

二、用鏈表實現(xiàn)軟件定時器

介于以上用結(jié)構(gòu)體數(shù)組實現(xiàn)軟件定時器的種種缺點,我們提出改進方案。經(jīng)過分析,在大多數(shù)定時業(yè)務(wù)中,往往只需要在某個時間段定時一次,也就是說定時器會開啟定時和結(jié)束定時,當(dāng)然,用數(shù)組的實現(xiàn)的定時器也可以開啟定時和關(guān)閉定時,只需要用start標(biāo)志去決定就行了,但是用數(shù)組實現(xiàn)的方式中,即使你關(guān)閉了定時器,也就是去掉了start標(biāo)志,此定時器雖然不運行了,但是數(shù)組的空間不會減少,硬件 tick依然要輪詢所有數(shù)組。

所以我們需要用鏈表來實現(xiàn)軟件定時器,在硬件tick中輪詢所有節(jié)點,開啟一個定時器就加入一個節(jié)點,關(guān)閉定時器就刪除一個節(jié)點,可以保證在當(dāng)前時刻只輪詢需要定時的節(jié)點,可以極大的保證定時準(zhǔn)確性。

在加上可以讓用戶選擇定時時間到了直接在硬件tick內(nèi)執(zhí)行或者在硬件tick內(nèi)置標(biāo)志,然后在while循環(huán)內(nèi)排隊執(zhí)行,可以非常有效的解決關(guān)鍵業(yè)務(wù)定時不精準(zhǔn)的問題,比如脈沖輸出這種需要定時準(zhǔn)確的業(yè)務(wù)。

鏈表實現(xiàn)方式

H文件:


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


C文件:

結(jié)構(gòu)體實現(xiàn)方式

最后在附上用結(jié)構(gòu)體數(shù)組實現(xiàn)的軟件定時器以作參考。

H文件:

C文件:


原文作者:一起學(xué)嵌入式



嵌入式軟件實現(xiàn)定時器的兩種方式的評論 (共 條)

分享到微博請遵守國家法律
汤阴县| 孝义市| 南靖县| 大荔县| 准格尔旗| 平定县| 阿拉善右旗| 大安市| 沙田区| 西峡县| 富民县| 贵南县| 西盟| 沾益县| 贡觉县| 陇西县| 塘沽区| 黄龙县| 林周县| 井研县| 营口市| 蒲城县| 呈贡县| 涿鹿县| 冕宁县| 什邡市| 崇阳县| 明溪县| 黑河市| 安国市| 团风县| 武宁县| 诸暨市| 和林格尔县| 柳州市| 仙居县| 木里| 武隆县| 睢宁县| 东乡| 炉霍县|