陳璇 陳晉瑜
摘? 要:嵌入式軟件的研發(fā)需要綜合各方面的因素去考慮和取舍,以達(dá)到質(zhì)量和效益之間的均衡,要充分發(fā)揮硬件的性能,提高軟件的質(zhì)量是嵌入式軟件研究的前提,是企業(yè)前期研究必不可少的一個(gè)環(huán)節(jié)。為了實(shí)現(xiàn)低成本,開發(fā)周期短的嵌入式軟件,研究設(shè)計(jì)了基于STM32F107VC的嵌入式前后臺控制系統(tǒng)設(shè)計(jì),完成與設(shè)備的交互。
關(guān)鍵詞:STM32;嵌入式;后臺控制系統(tǒng)
中圖分類號:TP273? ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)01-0039-03
Abstract:The research and development of embedded software needs to consider and choose from all aspects,in order to achieve the balance between quality and benefit,to give full play to the performance of hardware,to improve the quality of software is the premise of embedded software research,and is an essential part of the enterprises early research. In order to realize the embedded software with low cost and short development cycle,an embedded front and back control system based on STM32F107VC is designed to complete the interaction with the equipment.
Keywords:STM32;embedded;background control system
0? 引? 言
嵌入式軟件廣泛應(yīng)用于工業(yè)控制、智能家居、醫(yī)學(xué)醫(yī)療等各個(gè)領(lǐng)域,是現(xiàn)代智能科技發(fā)展的重要領(lǐng)域,本研究主要解決低成本,小型嵌入式設(shè)備的控制系統(tǒng)設(shè)計(jì)。研究范圍是基于單片機(jī)的輕量級嵌入式軟件開發(fā),為嵌入式初學(xué)者及單片機(jī)裸機(jī)開發(fā)者給出一種可行的設(shè)計(jì)方法,其中一些想法及思路是在具體開發(fā)過程總結(jié)的一些開發(fā)方法,供讀者設(shè)計(jì)參考使用。
1? 研究的背景及意義
本文研究的是一種兼顧成本和開發(fā)周期的快速廉價(jià)的控制系統(tǒng),應(yīng)用于對系統(tǒng)實(shí)時(shí)性要求不高,但穩(wěn)定可靠的小型MCU嵌入式設(shè)備中,針對裸機(jī)軟件的設(shè)計(jì)提供了可行的參考設(shè)計(jì)方案,保證系統(tǒng)能夠穩(wěn)定運(yùn)行,從軟件的設(shè)計(jì)上給出了框架。
2? 系統(tǒng)中的資源
為了滿足設(shè)計(jì)需求,結(jié)合STM32F107的片上資源和外圍接口的資源,合理地使用調(diào)配資源,一方面滿足系統(tǒng)的需求,另一方面,其合理化的設(shè)計(jì)軟件框架顯得尤為重要。本節(jié)指出了本研究用到的資源以及用途,本文控制的設(shè)備屬于工業(yè)上使用的設(shè)備,為了方便理解以及一些其他原因,暫用設(shè)備1、設(shè)備2等表示。在STM32官方庫文件中串口1、串口2、串口3用USARTx表示,而串口4用UARTx表示。
(1)USART1接口。用于程序調(diào)試打印的接口。
(2)USART2接口。用于監(jiān)控設(shè)備1的上下行數(shù)據(jù)。
(3)USART3接口。用于監(jiān)控設(shè)備2的上下行數(shù)據(jù)。
(4)UART4接口。用于監(jiān)控設(shè)備3的上下行數(shù)據(jù)。
(5)CAN總線接口。用于監(jiān)控設(shè)備4的上下行數(shù)據(jù)。
(6)EXTI外部線中斷接口(即GPIO配置成此模式)。用于按鍵控制。
(7)TIM2。用于對屏幕需要更新的參數(shù)進(jìn)行動(dòng)態(tài)刷新和保護(hù)OLED屏幕。
(8)TIM3。用于對系統(tǒng)連接的設(shè)備進(jìn)行定時(shí)查詢。
(9)TIM4。用于對設(shè)備上行數(shù)據(jù)進(jìn)行定時(shí)解析。
(10)NET。網(wǎng)口用于與上位機(jī)的交互。
3? 中斷優(yōu)先級的考慮
由于是無操作系統(tǒng)的前后嵌入式軟件,處理好系統(tǒng)的中斷優(yōu)先級,是保證軟件前臺數(shù)據(jù)能夠準(zhǔn)確接收的重要保證,是軟件設(shè)計(jì)的難點(diǎn),本文設(shè)計(jì)的思路是結(jié)合實(shí)際情況,即系統(tǒng)對數(shù)據(jù)實(shí)時(shí)性要求不高的要求,總體思路是采用閉環(huán)操作,即同一時(shí)間保證只有一個(gè)設(shè)備在交互,通過快速的輪詢,達(dá)到提高設(shè)備實(shí)時(shí)性的要求。本文的全局中斷分組為Group2,即有兩位的搶占優(yōu)先級和兩位的響應(yīng)優(yōu)先級,并且可以設(shè)置同樣的優(yōu)先級,數(shù)字越小代表優(yōu)先級越高[1]。
TIM2定時(shí)器的主要功能是實(shí)時(shí)更新一些設(shè)備的狀態(tài)參數(shù),并且需要及時(shí)響應(yīng)按鍵的操控,將優(yōu)先級設(shè)置為最高的主要原因?yàn)槠聊坏娘@示是人機(jī)交互界面最主要的依托,是用戶體驗(yàn)的直接表現(xiàn),所有的操作都應(yīng)該為用戶的操作讓路。其次是四個(gè)連接設(shè)備可以按照重要性等級的分類,使設(shè)備1優(yōu)先級大于設(shè)備2的優(yōu)先級大于設(shè)備3的優(yōu)先級,但由于采用的閉環(huán)設(shè)備操作指令,這幾個(gè)優(yōu)先級可以適當(dāng)?shù)胤潘桑驗(yàn)檫@四個(gè)設(shè)備不會同時(shí)進(jìn)行查詢,而使得設(shè)備的上行數(shù)據(jù)回復(fù)時(shí)刻不受控,導(dǎo)致復(fù)雜的中斷嵌套的問題,嚴(yán)重時(shí)還會使某些設(shè)備數(shù)據(jù)丟失。上位機(jī)交互的功能依托于本嵌入式軟件與底層設(shè)備的交互,故優(yōu)先級不需要太高。解析設(shè)備的定時(shí)器的優(yōu)先級同樣不需要很高,因?yàn)樵趯?shí)際的使用過程中,定時(shí)器500 ms輪詢一次設(shè)備,還是520 ms輪詢一次設(shè)備對于本系統(tǒng)沒有嚴(yán)格的要求。優(yōu)先級最低的是用于按鍵的外部線中斷,本來用于人機(jī)交互必不可少的按鍵,優(yōu)先級應(yīng)該最高,但是由于按鍵需要消抖,加上人的反應(yīng)時(shí)間,按鍵的優(yōu)先級調(diào)到最低,在用戶的使用上沒有明顯的差別,同時(shí)不影響應(yīng)用其他任務(wù)的進(jìn)行,故按鍵中斷的優(yōu)先級設(shè)置為最低。
4? 信號量的處理
信號量是一些實(shí)時(shí)操作系統(tǒng)的概念,有時(shí)也被稱為信號燈,是多線程環(huán)境下使用的一種設(shè)置,可以用來保證兩個(gè)或者多個(gè)關(guān)鍵代碼不被并發(fā)調(diào)用。本文使用信號量的概念,主要是為了說明代碼執(zhí)行的獨(dú)立性,因?yàn)樵谇昂笈_系統(tǒng)中存在著多個(gè)中斷,并且各個(gè)中斷都在不斷地執(zhí)行著自己的任務(wù),當(dāng)在實(shí)際的用戶使用過程中,如此時(shí)需要對一個(gè)設(shè)備進(jìn)行命令下發(fā),但有各個(gè)中斷任務(wù)進(jìn)行干擾,從而必須進(jìn)行代碼段的保護(hù),使代碼能夠獨(dú)立地執(zhí)行,并完成其功能[2]。
這里需要重點(diǎn)說明的是,按照中斷嵌套的使用原理,中斷完畢、恢復(fù)現(xiàn)場后會繼續(xù)執(zhí)行后臺任務(wù),不會干擾后臺任務(wù)的執(zhí)行,但是在實(shí)際設(shè)計(jì)中,因?yàn)榍芭_的定時(shí)輪詢?nèi)蝿?wù)有可能在某一時(shí)刻打斷后臺的任務(wù),但是這種打斷不是一定的,需要看定時(shí)器的定時(shí)時(shí)間與后臺下行指令的響應(yīng)時(shí)間相關(guān),也就是說一旦被定時(shí)輪詢?nèi)蝿?wù)打斷后,此任務(wù)可能輪詢的設(shè)備正是該下行指令需要設(shè)置的設(shè)備,這種情況下,很可能導(dǎo)致該下行指令無法響應(yīng),并且輪詢的時(shí)間越短,該指令無法響應(yīng)的概率就會直線上升,故引入信號量是一種很好的解決方法。
5? 系統(tǒng)設(shè)計(jì)思路及框架
本系統(tǒng)設(shè)計(jì)的是前后控制系統(tǒng),可以實(shí)現(xiàn)對設(shè)備的指令控制、實(shí)時(shí)監(jiān)控、狀態(tài)檢測等,設(shè)計(jì)程序的整體思想是盡量在同一時(shí)間做同一件事情,減少中斷的嵌套,同時(shí)最大限度地滿足實(shí)時(shí)的人機(jī)交互功能。
首先從用戶的角度看,系統(tǒng)可通過自身的外圍設(shè)備屏幕和按鍵進(jìn)行與設(shè)備交互;還可以連接上位機(jī)后,通過上位機(jī)完成對設(shè)備的控制,通過兩種方式控制設(shè)備的本質(zhì)上都是前后臺系統(tǒng)完成與設(shè)備的交互,但從用戶的角度來看兩種方式是相互獨(dú)立的,都可以獨(dú)自完成控制,同時(shí)這兩種方式又是相互聯(lián)系的,如,使用上位機(jī)打開設(shè)備后,可以使用本地的按鍵屏幕關(guān)閉設(shè)備;再如,上位機(jī)改變設(shè)備參數(shù)后,本地監(jiān)控的屏幕對應(yīng)的參數(shù)也會更新。
同時(shí)在這里要再次說明,前后臺系統(tǒng)的設(shè)計(jì),本質(zhì)上是一個(gè)while(1)無限循環(huán)和若干個(gè)中斷組成,前臺是由若干個(gè)中斷組成,及時(shí)響應(yīng)設(shè)備的上行信息,或者完成其他任務(wù),后臺是由用戶主動(dòng)發(fā)起的一些命令響應(yīng)操作,如設(shè)備控制、狀態(tài)監(jiān)測、告警查詢等等。
其次,從程序設(shè)計(jì)的角度看,在中斷優(yōu)先級設(shè)置合理,并且采用命令閉環(huán)的方式下,在信號量的機(jī)制下,前后臺之間的運(yùn)行互不干擾,前后臺之間的交互也很清晰,為整個(gè)程序的設(shè)計(jì)提供了框架。
最后,前臺設(shè)計(jì)中各個(gè)任務(wù)與后臺任務(wù)有交互,同時(shí)前臺各個(gè)任務(wù)之間也會有數(shù)據(jù)的交互,這其中數(shù)據(jù)傳遞大多都是由全局消息進(jìn)行完成的,軟件設(shè)計(jì)首先要保證用戶交互可以隨時(shí)進(jìn)行,這點(diǎn)由中斷優(yōu)先級保證,其次要保證設(shè)備的下行命令能夠及時(shí)響應(yīng),保證用戶交互的成功,最后是設(shè)備的狀態(tài)要能夠全部監(jiān)測到,并且設(shè)置合理的輪詢時(shí)間,這就是軟件設(shè)計(jì)的整體思想。在系統(tǒng)整體框圖中,較大的虛線框表示前臺、后臺的操作和任務(wù)組成;用戶框單獨(dú)列出;箭頭表示信號或者操作的指向;信號量用圓角虛線框表示,其他操作及任務(wù)框都是實(shí)線框表示,這是因?yàn)樵谙到y(tǒng)初始化和一些系統(tǒng)獨(dú)占的任務(wù)中不需要等待信號量,系統(tǒng)可以直接下發(fā)命令給設(shè)備。系統(tǒng)軟件設(shè)計(jì)的整體框圖如圖1所示。
6? 前后臺設(shè)計(jì)中的優(yōu)缺點(diǎn)分析
本文設(shè)計(jì)的是前后臺控制系統(tǒng),適用于眾多嵌入式的小型控制系統(tǒng)中,研發(fā)成本低,周期短,加上STM32官方庫的支持,很方便程序進(jìn)行開發(fā)。但是開發(fā)之前必須搞清楚軟件的設(shè)計(jì)需求,明白MCU的系統(tǒng)資源,考慮系統(tǒng)對實(shí)時(shí)性的要求,這樣才能更好地選擇合適的、經(jīng)濟(jì)的軟件方案。
本軟件簡單,易于上手,但是沒有實(shí)時(shí)系統(tǒng)的加持,一些信號量的機(jī)制需要自己完成,前后臺的數(shù)據(jù)需要閉環(huán)處理,還需要合理地調(diào)整優(yōu)先級,這都是需要程序員根據(jù)實(shí)際情況去調(diào)整的。
7? 結(jié)? 論
前后臺控制系統(tǒng)的設(shè)計(jì),能夠滿足工業(yè)上大多數(shù)場合的使用,在設(shè)備控制,自動(dòng)化處理過程中有著廣泛的應(yīng)用前景,如果加上無線模塊,還可以應(yīng)用在最近興起的智能家居上。總之,一個(gè)好的軟件設(shè)計(jì)必須滿足其應(yīng)用場合,才能發(fā)揮其自身的優(yōu)勢,定位好自身的應(yīng)用領(lǐng)域就顯得尤為重要。
參考文獻(xiàn):
[1] 陳明.基于STM32的嵌入式web服務(wù)器的設(shè)計(jì) [D].武漢:武漢理工大學(xué),2013.
[2] 任慰.以實(shí)時(shí)操作系統(tǒng)為中心的嵌入式系統(tǒng)平臺化設(shè)計(jì)研究 [D].武漢:華中科技大學(xué),2013.
作者簡介:陳璇(1993-),男,漢族,山西臨汾人,助理工程師,本科,研究方向:嵌入式研究;陳晉瑜(1997-),男,漢族,山西臨汾人,本科,研究方向:嵌入式理論等。