曾春,蔡陽(yáng),孫周,胡杰
摘要:stm32是目前應(yīng)用最廣泛的單片機(jī)之一,具有低功耗、高性能等優(yōu)點(diǎn)。移植了UCOSII之后的單片機(jī),相比于“裸機(jī)”,具有操作靈活,實(shí)時(shí)性良好的優(yōu)點(diǎn)。本文針對(duì)傳統(tǒng)軟件定時(shí)器維護(hù)方式,提出了一種基于運(yùn)行態(tài)數(shù)組的軟件定時(shí)器改進(jìn)方案,和空閑定時(shí)器控制塊鏈表指針相比,支持隨機(jī)訪問(wèn)定時(shí)器數(shù)據(jù);和定時(shí)器控制塊數(shù)組相比,運(yùn)行期綁定成員變量,更加靈活;和定時(shí)器輪相比,更加直觀、方便操作和理解。缺點(diǎn)是內(nèi)存浪費(fèi),對(duì)于固定的系統(tǒng)來(lái)說(shuō),當(dāng)一個(gè)操作系統(tǒng)燒進(jìn)下位機(jī),不會(huì)產(chǎn)生復(fù)雜而且龐大的數(shù)據(jù),這可能不會(huì)產(chǎn)生較大的影響。
關(guān)鍵詞:UCOSII;軟件定時(shí)器;stm32;物聯(lián)網(wǎng);運(yùn)行態(tài);嵌入式
中圖分類號(hào):TP316? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)20-0014-06
Improvement Scheme of High-precision UCOSII Software Timer Based on Pointer Array
ZE|NG Chun, CAI Yang, SUN Zhou, HU Jie
(School of Computer Science, University of Yangtse, Jingzhou 434000, China)
Abstract: STM32 is one of the most widely used single chip microcontrollers at present. It has the advantages of low power consumption and high performance. After transplanting UCOSII MCU, compared with "bare machine", it has flexible operation and good real-time performance. Aiming at the traditional maintenance mode of software timer, this paper proposes an improved scheme of software timer based on running state array, which supports random access to timer data compared with free timer control block list pointer, and binds member variables more flexibly in running time than timer control block array. It is more intuitive and convenient to operate and understand compared with timer wheel. The disadvantage is memory waste. For a fixed system, when an operating system burns into the lower computer, it will not produce complex and huge data, This may not have a major impact.
Key words: UCOSII; software timers; stm32; iot; operating state ;embedded system
UCOSII由美國(guó)Jean J. Labrosse設(shè)計(jì)而成,具有開源、實(shí)時(shí)性、穩(wěn)定性、對(duì)處理器要求不高等特點(diǎn)[1],一個(gè)操作系統(tǒng)的實(shí)時(shí)性是指該系統(tǒng)的時(shí)鐘信號(hào)能夠準(zhǔn)確的定時(shí),同時(shí)各處的時(shí)鐘能夠在不同的場(chǎng)合比如ns、us級(jí)達(dá)到一致。數(shù)據(jù)的實(shí)時(shí)性在如今的科技時(shí)代起了非常重要的作用,移植了UCOSII后的STM32F107ZET6具有了強(qiáng)大的浮點(diǎn)運(yùn)算能力,能夠精確處理各項(xiàng)從具有狀態(tài)變化的設(shè)備傳遞過(guò)來(lái)數(shù)據(jù),而且UCOSII中的軟件定時(shí)器能夠精準(zhǔn)地控制各項(xiàng)任務(wù)的時(shí)間,具有良好的數(shù)據(jù)實(shí)時(shí)性。但是傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)雖然力求內(nèi)存占用量小,卻忽視了靈活操作各項(xiàng)實(shí)時(shí)數(shù)據(jù)的功能,因此,本文采用了基于指針數(shù)組的數(shù)據(jù)結(jié)構(gòu),改進(jìn)了傳統(tǒng)對(duì)于軟件定時(shí)器的維護(hù)方式,內(nèi)存影響可以忽略不計(jì),指針數(shù)組意為存放指針的數(shù)組,每個(gè)數(shù)組元素中存放的是指針。
UCOSII為一個(gè)開源系統(tǒng),在任務(wù)同步與通信上提供了信號(hào)量、消息隊(duì)列和消息郵箱功能[2],另外還能進(jìn)行時(shí)間處理、CPU移植等功能。正是由于其開源并且功能多使得這方面的研究非常廣泛。改變定時(shí)器的維護(hù)方式,也就是改變其存在于操作系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),可以更加多樣化實(shí)現(xiàn)對(duì)智能設(shè)備的數(shù)據(jù)實(shí)時(shí)操作,比如有時(shí)我們希望通過(guò)不斷修改定時(shí)器的值來(lái)實(shí)現(xiàn)對(duì)于步進(jìn)電機(jī)的計(jì)算機(jī)數(shù)控,以便得到理想的結(jié)果,有的系統(tǒng)采用外部計(jì)數(shù)脈沖方式,實(shí)時(shí)監(jiān)測(cè)車針在各個(gè)相位的運(yùn)動(dòng)位置[3],這就需要用到高精度的實(shí)時(shí)操作系統(tǒng)來(lái)實(shí)現(xiàn)相應(yīng)功能。
1 軟件定時(shí)器基礎(chǔ)知識(shí)
單片機(jī)內(nèi)部都擁有能夠通過(guò)對(duì)時(shí)鐘脈沖的計(jì)數(shù)實(shí)現(xiàn)定時(shí)的硬件定時(shí)器,但數(shù)量有限,于是便有了軟件定時(shí)器,它基于硬件定時(shí)器的定時(shí)中斷利用軟件方法來(lái)實(shí)現(xiàn),定時(shí)更長(zhǎng),使用更靈活[4]。51單片機(jī)特便是航天器中的C51軟件定時(shí)器會(huì)出現(xiàn)甚至同時(shí)出現(xiàn)以下問(wèn)題:中斷沖突下定時(shí)器操作錯(cuò)誤,非中斷沖突下定時(shí)器操作錯(cuò)誤和定時(shí)器時(shí)間碼讀取錯(cuò)誤[5]。而移植了操作系統(tǒng)后的stm32單片機(jī)功能就比51單片機(jī)強(qiáng)大了很多。UCOSII從V2.8.3版本(包括UCOSIII)以后加入了軟件定時(shí)器,這使得UCOSII的功能更加完善。而且相比于硬件定時(shí)器,軟件定時(shí)器的開銷更小,成本更低,不用擔(dān)心硬件損耗的問(wèn)題,遇到問(wèn)題,直接可以在軟件層面解決??梢赃@么理解,軟件定時(shí)器就是一個(gè)硬件定時(shí)器的驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)是可以根據(jù)任務(wù)需要進(jìn)行一些更改的,嵌入式的核心就在于對(duì)中間件等驅(qū)動(dòng)程序的編寫,并不在于創(chuàng)造全新的一種固定的算法,而是依賴于已經(jīng)存在的硬件,根據(jù)具體情景靈活開發(fā)。