![實(shí)用單片機(jī)系統(tǒng)MS3_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/65da5c28-f40e-4b69-a181-8b521e891a71/65da5c28-f40e-4b69-a181-8b521e891a711.gif)
![實(shí)用單片機(jī)系統(tǒng)MS3_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/65da5c28-f40e-4b69-a181-8b521e891a71/65da5c28-f40e-4b69-a181-8b521e891a712.gif)
![實(shí)用單片機(jī)系統(tǒng)MS3_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/65da5c28-f40e-4b69-a181-8b521e891a71/65da5c28-f40e-4b69-a181-8b521e891a713.gif)
![實(shí)用單片機(jī)系統(tǒng)MS3_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/65da5c28-f40e-4b69-a181-8b521e891a71/65da5c28-f40e-4b69-a181-8b521e891a714.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)用單片機(jī)系統(tǒng)MS3程序分析作者:閆瑤目錄:1.MS3簡(jiǎn)介 2.MS3程序架構(gòu)分析3.思想總結(jié)MS3簡(jiǎn)介 1.平臺(tái)化 MS3是一個(gè)注重于基礎(chǔ)與實(shí)用,為使用者提供必要和通用的各種函數(shù),軟件架構(gòu)清晰,完全開(kāi)源的軟件平臺(tái)。 這個(gè)平臺(tái)讓開(kāi)發(fā)者基于一定的基礎(chǔ)上進(jìn)行開(kāi)發(fā),便于使用者快速且高效的完成各種不同的項(xiàng)目。 2.資源概況 MS3致力于簡(jiǎn)潔、實(shí)用的軟件架構(gòu)。 數(shù)據(jù)封裝格式上普遍采用枚舉與結(jié)構(gòu)體,清晰明了,便于閱讀;采用動(dòng)態(tài)靈活的指針結(jié)構(gòu),節(jié)省系統(tǒng)空間,簡(jiǎn)化程序;采用16進(jìn)制的消息處理機(jī)制;獨(dú)特的軟件定時(shí)器設(shè)計(jì);具有統(tǒng)一和標(biāo)準(zhǔn)化的按鍵處理機(jī)制。 3.進(jìn)版說(shuō)明 相比前兩個(gè)版本,MS3在消息機(jī)制上有改進(jìn),采
2、用16位結(jié)構(gòu);軟件定時(shí)器上有了比較大的改進(jìn),采用回調(diào)函數(shù)形式,并且支持中斷內(nèi)回調(diào)和中斷外回調(diào) ;去掉了很多具體的應(yīng)用,留下一個(gè)內(nèi)核可以適用于一個(gè)最小系統(tǒng)。MS3程序架構(gòu)分析 MS3這個(gè)平臺(tái)的核心在于“消息機(jī)制”。 從主程序Main()的結(jié)構(gòu)可以看出,初始化init_process()之后程序即進(jìn)入大循環(huán),在這個(gè)循環(huán)體中進(jìn)行的是兩種操作:取消息和根據(jù)消息類(lèi)型選擇待執(zhí)行的程序分支。 MS3平臺(tái)架構(gòu)的核心內(nèi)容是其“消息機(jī)制”的處理,但其特色不僅僅于此。介紹完消息機(jī)制后,我們會(huì)介紹“軟件虛擬定時(shí)器”的原理及使用 。 主程序main( )結(jié)構(gòu):目前程序中通過(guò)枚舉方式定義了如下消息類(lèi)型: MSG_NULL
3、 - /*have no message*/ MSG_KEY - /*key message*/ MSG_UART - /*uart message*/ MSG_RTC - /*real time counter message*/ MSG_MSTIMER - /*timer message*/ MSG_TEST - /*special for test message*/程序進(jìn)入循環(huán)體后,首先通過(guò)MSG_GET_MSG(&Msg) 讀取消息,然后根據(jù)消息類(lèi)型選擇程序分支??梢钥闯鯩S3消息機(jī)制的結(jié)構(gòu)很清晰,程序的執(zhí)行即通過(guò)該消息機(jī)制。 MS3中定義隊(duì)列 u16MsgArrayMSG_
4、ARRAY_SIZE 來(lái)存放消息,消息被定義為U16數(shù)據(jù)類(lèi)型, 高8位存放消息類(lèi)型,低8位存放消息值。 入消息和取消息 從主程序段中看出,針對(duì)消息隊(duì)列的操作主要是取消息動(dòng)作,那下面看一下MS3中對(duì)入消息和取消息分別是怎么操作的。 整體來(lái)說(shuō),入消息時(shí)將消息類(lèi)型及消息值分別入隊(duì)列;取消息則取出數(shù)據(jù)類(lèi)型為16位的消息。 入消息: 首先判斷消息隊(duì)列是否已滿。若滿則返回;未滿則保存當(dāng)前中斷使能狀態(tài),同時(shí)關(guān)中斷。 將消息類(lèi)型(MsgType)、消息值(Val)分別入隊(duì)列。 開(kāi)中斷。 取消息 #define MSG_GET_MSG(pU16) msg_get_out(pU16) 從宏定義可以看出,主程序中取
5、消息動(dòng)作即是通過(guò)左邊的函數(shù)執(zhí)行的。 取消息時(shí)首先判斷隊(duì)列是否為空。為空則返回0 x0000;不為空則保存中斷使能狀態(tài),并且關(guān)中斷。取出數(shù)據(jù)類(lèi)型為pU16的消息?;謴?fù)中斷使能狀態(tài),返回。 消息機(jī)制的執(zhí)行 結(jié)合入消息和取消息,我們可以這樣理解Main()內(nèi)循環(huán)體的執(zhí)行狀況。 首先,向u16MsgArray內(nèi)取消息,分支選擇語(yǔ)句switch(MSG_TYPE(Msg)則提取出消息的消息類(lèi)型,根據(jù)不同類(lèi)型執(zhí)行相應(yīng)程序分支,其中也包括隊(duì)列中無(wú)消息時(shí)對(duì)應(yīng)的消息類(lèi)型MSG_NULL。因?yàn)楫?dāng)隊(duì)列中消息時(shí)的返回值為0 x0000,故執(zhí)行MSG_NULL分支。 時(shí)鐘節(jié)拍的引入 以上了解到消息機(jī)制的執(zhí)行狀況,但在程
6、序初始化之后,消息隊(duì)列是默認(rèn)為空的。這樣,雖然循環(huán)體內(nèi)一直會(huì)取消息并判斷消息類(lèi)型,但將始終執(zhí)行MSG_NULL程序段。 那么MS3是如何執(zhí)行我們需要執(zhí)行的任務(wù)的呢?那就是前面提到的入消息?,F(xiàn)在我們來(lái)看看哪些地方,我們進(jìn)行入消息的操作了。 在這之前我們要介紹一下MS3的系統(tǒng)時(shí)鐘節(jié)拍。 時(shí)鐘節(jié)拍 MS3以T2為硬件定時(shí)器,具有較高的優(yōu)先級(jí),整個(gè)系統(tǒng)必須依賴它來(lái)運(yùn)行。按鍵檢測(cè),軟件虛擬定時(shí)器,例行任務(wù)程序都要靠它來(lái)實(shí)現(xiàn)。T2作為系統(tǒng)時(shí)鐘,20ms進(jìn)入一次中斷,中斷內(nèi)調(diào)用timer2_process(),因此系統(tǒng)時(shí)鐘節(jié)拍為20ms。這樣每次系統(tǒng)時(shí)鐘節(jié)拍到了之后,程序進(jìn)入timer2_process()
7、。此進(jìn)程中,首先檢測(cè)是否有軟件虛擬定時(shí)器(后續(xù)將詳細(xì)介紹)在工作,若有則進(jìn)入軟件定時(shí)器服務(wù)程序;若無(wú)則運(yùn)行例行任務(wù)程序。 例行任務(wù)程序 例行任務(wù)程序中包括:key_check()鍵盤(pán)例行程序和rtc_soft_routine()實(shí)時(shí)時(shí)鐘例行程序。 在這兩個(gè)例行程序中均有:MSG_SEND_MSG()這個(gè)函數(shù),這就是前面提到的入消息操作。 既然有入消息操作了,那么主程序循環(huán)體中的取消息操作就將取到當(dāng)前消息隊(duì)列中的消息。并按需求執(zhí)行相對(duì)應(yīng)的程序段。 消息機(jī)制小結(jié) 前面針對(duì)消息機(jī)制,分析了程序的執(zhí)行過(guò)程。在這里將前面提到的內(nèi)容做個(gè)歸納。 程序開(kāi)始運(yùn)行后,首先執(zhí)行初始化操作,包括:端口初始化、中斷初始
8、化、FLASH初始化、實(shí)時(shí)時(shí)鐘初始化等等,其中包括最重要的系統(tǒng)時(shí)鐘初始化timer0_init()。 初始化完畢后,MS3進(jìn)入消息機(jī)制管理階段,此階段程序循環(huán)向u16MsgArray 內(nèi)取消息,將取出的消息通過(guò)MSG_TYPE( )得到消息類(lèi)型,在分支選擇語(yǔ)句中根據(jù)消息類(lèi)型執(zhí)行相應(yīng)程序段。以上消息機(jī)制一直循環(huán)貫穿于整個(gè)系統(tǒng)的運(yùn)行中。 除了不斷循環(huán)的消息機(jī)制管理外,那就是例行任務(wù)程序以系統(tǒng)節(jié)拍為周期,根據(jù)需要向消息隊(duì)列中送人待執(zhí)行的消息。 這樣,MS3在程序前后臺(tái)兩方面的配合下,通過(guò)消息機(jī)制正常運(yùn)轉(zhuǎn)。 軟件虛擬定時(shí)器 本文檔開(kāi)始的時(shí)候,我們提到過(guò)“軟件虛擬定時(shí)器”這個(gè)名詞,那么它有什么作用,并且
9、如何使用呢?下面這部分就將詳細(xì)介紹 -軟件虛擬定時(shí)器。 *在初讀MS3,還沒(méi)有完全理解軟件虛擬定時(shí)器作用的時(shí)候,感覺(jué)它沒(méi)什么特別的地方,但一旦后來(lái)理解其含義時(shí),才感覺(jué)它是很有意思的一個(gè)東西。 軟件虛擬定時(shí)器的引入 現(xiàn)在理解“軟件虛擬定時(shí)器”之后,感覺(jué)作者在MS2程序分析中舉的“鬧鐘”的例子是很恰當(dāng)?shù)?,并且利于初學(xué)者對(duì)其概念進(jìn)行理解。 首先我想說(shuō)說(shuō)平時(shí)我們使用鬧鐘的目的。假設(shè)一個(gè)電子表有鬧鐘的功能,我們使用鬧鐘就是想在我們定的一段時(shí)間之后得到提醒,在定好時(shí)間之后,我們就不愿意時(shí)時(shí)刻刻的去查看定時(shí)的時(shí)間是否要到了,希望電子表能自動(dòng)提醒我們。同時(shí)在這段時(shí)間之內(nèi)我們還想讓電子表正常提供顯示時(shí)間的功用。
10、 在MS3中使用軟件虛擬定時(shí)器也是一樣的目的,我們想要一個(gè)任務(wù)在一定時(shí)間之后被執(zhí)行,在我們定好時(shí)間之后我們又不愿去管理它,那么虛擬時(shí)鐘管理程序就會(huì)在定時(shí)時(shí)間到了的時(shí)候,自動(dòng)將待執(zhí)行的程序加入的MS3的消息機(jī)制執(zhí)行。這就是MS3的另一特色。 以上是從思想和概念上向大家介紹“軟件虛擬定時(shí)器”,接下來(lái)我們看看MS3中軟件虛擬定時(shí)器是如何具體操作的。 軟件虛擬定時(shí)器的建立現(xiàn)在分析一下 U8 MSTimerStart( ) 這個(gè)函數(shù)。 一旦有類(lèi)似于前文提到的”鬧鐘”程序要執(zhí)行,則要通過(guò)該函數(shù)建立一個(gè)軟件虛擬定時(shí)器。程序開(kāi)始首先要檢查MSTimerID這個(gè)參數(shù),以便確認(rèn)當(dāng)前有幾個(gè)虛擬定時(shí)器正在被使用。一旦
11、查找到尚空閑的虛擬定時(shí)器,則在對(duì)應(yīng)位置上向MSTimerArrayi.delay和MSTimerArrayi.pCallBack中存入所需延時(shí)的時(shí)間和待執(zhí)行函數(shù)的函數(shù)指針。找到這個(gè)空閑的位置,并且存入相應(yīng)參數(shù)后,通過(guò)SETBIT(MSTimerID, i)將當(dāng)前空閑位置1,表明此處已使用虛擬定時(shí)器,并通過(guò)return(i)返回。 *MS3中允許用戶最多建立八個(gè)軟件虛擬定時(shí)器。 軟件虛擬定時(shí)器服務(wù)程序 一旦建立軟件虛擬定時(shí)器后,參數(shù)MSTimerID將為非零,表明當(dāng)前有虛擬定時(shí)器工作。那么如下timer2_process( )中 if 語(yǔ)句將滿足“MSTimerID0”的條件,這樣MSTimer
12、Service( )將會(huì)被調(diào)用。 當(dāng)有軟件虛擬定時(shí)器工作時(shí),一旦系統(tǒng)時(shí)鐘節(jié)拍到時(shí),則調(diào)用MSTimerService( )服務(wù)程序。程序中對(duì)定時(shí)器參數(shù)MSTimerID從低位開(kāi)始檢測(cè),若判定當(dāng)前位有虛擬定時(shí)器工作,并且定時(shí)時(shí)間未到,則將定時(shí)時(shí)間減1,然后循環(huán)檢測(cè)下一位,直到當(dāng)前位無(wú)虛擬定時(shí)工作為止。 在檢測(cè)過(guò)程中,當(dāng)某個(gè)虛擬定時(shí)器定時(shí)時(shí)間到了之后,則根據(jù)該虛擬定時(shí)器被建立時(shí)MSTimerMode的設(shè)定值,為1則將消息類(lèi)型MSG_MSTIMER及待執(zhí)行函數(shù)的函數(shù)地址均入消息隊(duì)列;為0則在中斷中執(zhí)行對(duì)應(yīng)的函數(shù)。然后清除該虛擬定時(shí)器對(duì)應(yīng)的參數(shù)MSTimerID 。 以上為一個(gè)系統(tǒng)時(shí)鐘節(jié)拍所執(zhí)行的操作
13、。達(dá)到的效果是每個(gè)虛擬定時(shí)器的定時(shí)時(shí)間都減1。在若干個(gè)時(shí)鐘節(jié)拍之后,若無(wú)新的虛擬定時(shí)器被建立,則所有虛擬定時(shí)都將執(zhí)行完畢。 通過(guò)以上介紹,應(yīng)該可以知道虛擬定時(shí)器服務(wù)程序的目的。 它是將建立的需要延時(shí)一定時(shí)間之后再執(zhí)行的程序,在定時(shí)時(shí)間到達(dá)后將其加入到消息隊(duì)列中。由主程序的消息機(jī)制來(lái)管理,以達(dá)到執(zhí)行相應(yīng)程序的目的。 這就是MS3中消息機(jī)制和軟件虛擬定時(shí)器的關(guān)系。 另外,軟件虛擬定時(shí)器可以實(shí)現(xiàn)嵌套,即軟件定時(shí)器里可以嵌套新的軟件定時(shí)器。 按鍵處理機(jī)制 MS3中包含統(tǒng)一和標(biāo)準(zhǔn)化的按鍵處理機(jī)制。 按鍵處理程序包含在例行任務(wù)中,每個(gè)系統(tǒng)節(jié)拍 到時(shí)都會(huì)進(jìn)行按鍵檢查。由于以20ms的系統(tǒng)時(shí)鐘為執(zhí) 行周期,故
14、我們常遇到的“20ms按鍵去抖”處理可以在 MS3中有較好的處理。 MS3有兩種按鍵處理風(fēng)格,一種針對(duì)PC機(jī)制,另一種針對(duì)MCU機(jī)制,在預(yù)處理階段用戶可對(duì)這兩種風(fēng)格進(jìn)行選擇。下面以PC風(fēng)格的具體例程看一下MS3的按鍵處理機(jī)制。 每個(gè)MS3系統(tǒng)時(shí)鐘節(jié)拍內(nèi)都會(huì)執(zhí)行key_check()。 首先,檢查按鍵使能是否打開(kāi),未開(kāi)則返回;然后,讀取按鍵返回信息,若無(wú)按鍵操作,則返回,故不會(huì)浪費(fèi)系統(tǒng)資源;若有按鍵,則按鍵計(jì)數(shù)器keycounter+,當(dāng)滿足短按鍵操作條件,且非誤操作,則將按鍵消息入消息隊(duì)列;當(dāng)滿足長(zhǎng)按鍵操作條件,同樣將按鍵消息入消息。 按鍵處理中加入“用于連續(xù)兩個(gè)按鍵速度過(guò)快導(dǎo)致按鍵混亂”的處理機(jī)制,保證按鍵處理可靠。 到此,MS3的程序架構(gòu)可以說(shuō)簡(jiǎn)單的分析完畢了。 我是一名單片機(jī)程序的初學(xué)者,初次接觸MS3時(shí)感覺(jué)很有壓力,這么“復(fù)雜”的程序不知什么時(shí)候才能夠搞明白。因?yàn)槌醮谓佑|,一開(kāi)始讀的時(shí)候有些吃力,邊學(xué)邊讀,時(shí)間不是很長(zhǎng),花了半天時(shí)間就讀完了,雖然沒(méi)有理解其真正的思想,但畢竟有了一個(gè)初步的了解。 在這個(gè)過(guò)程中,將自己理解的東西都記錄下來(lái)了。因?yàn)椴皇呛苊靼祝?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樹(shù)立規(guī)則為本服務(wù)理念,強(qiáng)化病歷書(shū)寫(xiě)證據(jù)意識(shí)課件
- 2025年高考語(yǔ)文常考必刷試題庫(kù)300題(含答案)
- 2025年畢節(jié)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年桐城師范高等專(zhuān)科學(xué)校高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025科學(xué)儀器行業(yè)發(fā)展趨勢(shì)與市場(chǎng)前景分析
- 2025養(yǎng)老行業(yè)發(fā)展趨勢(shì)與市場(chǎng)前景分析
- 建筑工程可行性研究合同協(xié)議書(shū)
- 演員合同書(shū)范本
- 經(jīng)典借款合同
- 海運(yùn)貨物運(yùn)輸合同范文
- 搞笑小品劇本《大城小事》臺(tái)詞完整版
- 人大代表小組活動(dòng)計(jì)劃人大代表活動(dòng)方案
- Vue3系統(tǒng)入門(mén)與項(xiàng)目實(shí)戰(zhàn)
- 2024年寧夏回族自治區(qū)中考英語(yǔ)試題含解析
- 光伏發(fā)電項(xiàng)目試驗(yàn)檢測(cè)計(jì)劃
- 房屋建筑工程投標(biāo)方案(技術(shù)方案)
- 靜脈輸液法操作并發(fā)癥的預(yù)防及處理
- 2025年高考語(yǔ)文作文備考:議論文萬(wàn)能模板
- T-BJCC 1003-2024 首店、首發(fā)活動(dòng)、首發(fā)中心界定標(biāo)準(zhǔn)
- 外科手術(shù)及護(hù)理常規(guī)
- 鐵嶺衛(wèi)生職業(yè)學(xué)院?jiǎn)握袇⒖荚囶}庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論