



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、狀態(tài)機(jī)思路在單片機(jī)程序設(shè)計(jì)中的應(yīng)用狀態(tài)機(jī)的概念狀態(tài)機(jī)是軟件編程中的一個(gè)重要概念。比這個(gè)概念更重要的是對(duì)它的靈活應(yīng)用。在一個(gè)思路清晰而且高效的程序中,必然有狀態(tài)機(jī)的身影浮現(xiàn)。比如說一個(gè)按鍵命令解析程序,就可以被看做狀態(tài)機(jī):本來在A 狀態(tài)下,觸發(fā)一個(gè)按鍵后切換到了狀態(tài);再觸發(fā)另一個(gè)鍵后切換到C 狀態(tài),或者返回到A 狀態(tài)。這就是最簡(jiǎn)單的按鍵狀態(tài)機(jī)例子。實(shí)際的按鍵解析程序會(huì)比這更復(fù)雜些,但這不影響我們對(duì)狀態(tài)機(jī)的認(rèn)識(shí)。進(jìn)一步看,擊鍵動(dòng)作本身也可以看做一個(gè)狀態(tài)機(jī)。一個(gè)細(xì)小的擊鍵動(dòng)作包含了:釋放、抖動(dòng)、閉合、抖動(dòng)和重新釋放等狀態(tài)。同樣,一個(gè)串行通信的時(shí)序(不管它是遵循何種協(xié)議,標(biāo)準(zhǔn)串口也好、I2C 也好;也
2、不管它是有線的、還是紅外的、無線的)也都可以看做由一系列有限的狀態(tài)構(gòu)成。顯示掃描程序也是狀態(tài)機(jī);通信命令解析程序也是狀態(tài)機(jī);甚至連繼電器的吸合/ 釋放控制、發(fā)光管(LED)的亮 / 滅控制又何嘗不是個(gè)狀態(tài)機(jī)。B當(dāng)我們打開思路,把狀態(tài)機(jī)作為一種思想導(dǎo)入到程序中去時(shí),就會(huì)找到解決問題的一條有效的捷徑。有時(shí)候用狀態(tài)機(jī)的思維去思考程序該干什么,比用控制流程的思維去思考,可能會(huì)更有效。這樣一來狀態(tài)機(jī)便有了更實(shí)際的功用。程序其實(shí)就是狀態(tài)機(jī)也許你還不理解上面這句話。請(qǐng)想想看,計(jì)算機(jī)的大廈不就是建立在 “0”和 “1”兩個(gè)基本狀態(tài)的地基之上么?狀態(tài)機(jī)的要素狀態(tài)機(jī)可歸納為 4 個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作、次態(tài)。
3、這樣的歸納,主要是出于對(duì)狀態(tài)機(jī)的內(nèi)在因果關(guān)系的考慮。 “現(xiàn)態(tài) ”和 “條件 ”是因, “動(dòng)作 ”和“次態(tài) ”是果。詳解如下: 現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。 條件:又稱為 “事件 ”。當(dāng)一個(gè)條件被滿足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。 動(dòng)作:條件滿足后執(zhí)行的動(dòng)作。動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動(dòng)作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新狀態(tài)。 次態(tài):條件滿足后要遷往的新狀態(tài)。 “次態(tài) ”是相對(duì)于 “現(xiàn)態(tài) ”而言的, “次態(tài) ”一旦被激活,就轉(zhuǎn)變成新的 “現(xiàn)態(tài) ”了。如果我們進(jìn)一步歸納,把 “現(xiàn)態(tài) ”和“次態(tài) ”統(tǒng)一起來,而把 “動(dòng)作 ”忽略
4、(降格處理) ,則只剩下兩個(gè)最關(guān)鍵的要素,即:狀態(tài)、遷移條件。狀態(tài)機(jī)的表示方法有許多種,我們可以用文字、圖形或表格的形式來表示一個(gè)狀態(tài)機(jī)。純粹用文字描述是很低效的,所以就不介紹了。接下來先介紹圖形的方式。狀態(tài)遷移圖( STD)狀態(tài)遷移圖( STD),是一種描述系統(tǒng)的狀態(tài)、以及相互轉(zhuǎn)化關(guān)系的圖形方式。狀態(tài)遷移圖的畫法有許多種,不過一般都大同小異。我們結(jié)合一個(gè)例子來說明一下它的畫法,如圖1 所示。(原文件名 :圖 1 狀態(tài)遷移圖 .jpg) 狀態(tài)框:用方框表示狀態(tài),包括所謂的“現(xiàn)態(tài) ”和 “次態(tài) ”。 條件及遷移箭頭:用箭頭表示狀態(tài)遷移的方向,并在該箭頭上標(biāo)注觸發(fā)條件。 節(jié)點(diǎn)圓圈:當(dāng)多個(gè)箭頭指向一
5、個(gè)狀態(tài)時(shí),可以用節(jié)點(diǎn)符號(hào)(小圓圈)連接匯總。 動(dòng)作框:用橢圓框表示。 附加條件判斷框:用六角菱形框表示。狀態(tài)遷移圖和我們常見的流程圖相比有著本質(zhì)的區(qū)別,具體體現(xiàn)為:在流程圖中,箭頭代表了程序指針的跳轉(zhuǎn);而在狀態(tài)遷移圖中,箭頭代表的是狀態(tài)的改變。我們會(huì)發(fā)現(xiàn),這種狀態(tài)遷移圖比普通程序流程圖更簡(jiǎn)練、直觀、易懂。這正是我們需要達(dá)到的目的。PC狀態(tài)遷移表除了狀態(tài)遷移圖,我們還可以用表格的形式來表示狀態(tài)之間的關(guān)系。這種表一般稱為狀態(tài)遷移表。表 1 就是前面介紹的那張狀態(tài)遷移圖的另一種描述形式。(原文件名 :表 1 狀態(tài)遷移表 .jpg) 采用表格方式來描述狀態(tài)機(jī),優(yōu)點(diǎn)是可容納更多的文字信息。例如,我們不但
6、可以在狀態(tài)遷移表中描述狀態(tài)的遷移關(guān)系,還可以把每個(gè)狀態(tài)的特征描述也包含在內(nèi)。 如果表格內(nèi)容較多,過于臃腫不利于閱讀,我們也可以將狀態(tài)遷移表進(jìn)行拆分。經(jīng)過拆分后的表格根據(jù)其具體內(nèi)容,表格名稱也有所變化。 比如,我們可以把狀態(tài)特征和遷移關(guān)系分開列表。被單獨(dú)拆分出來的描述狀態(tài)特征的表格,也可以稱為 “狀態(tài)真值表 ”。這其中比較常見的就是把每個(gè)狀態(tài)的顯示內(nèi)容單獨(dú)列表。這種描述每個(gè)狀態(tài)顯示內(nèi)容的表稱之為 “顯示真值表 ”。同樣,我們把單獨(dú)表述基于按鍵的狀態(tài)遷移表稱為 “按鍵功能真值表 ”。另外,如果每一個(gè)狀態(tài)包含的信息量過多,我們也可以把每個(gè)狀態(tài)單獨(dú)列表。 由此可見,狀態(tài)遷移表作為狀態(tài)遷移圖的有益補(bǔ)充,
7、它的表現(xiàn)形式是靈活的。 狀態(tài)遷移表優(yōu)點(diǎn)是信息涵蓋面大,缺點(diǎn)是視覺上不夠直觀,因此它并不能取代狀態(tài)遷移圖。比較理想的是將圖形和表格結(jié)合應(yīng)用。用圖形展現(xiàn)宏觀,用表格說明細(xì)節(jié)。二者互為參照,相得益彰。用狀態(tài)機(jī)思路實(shí)現(xiàn)一個(gè)時(shí)鐘程序接下來,我將就狀態(tài)機(jī)的應(yīng)用,結(jié)合流程圖、狀態(tài)遷移圖和狀態(tài)遷移,舉一個(gè)實(shí)際例子。下面這張圖是一個(gè)時(shí)鐘程序的狀態(tài)遷移圖,如圖2 所示。(原文件名 :圖 2 時(shí)鐘程序狀態(tài)遷移圖.jpg)把這張圖稍做歸納,就可以得到它的另一種表現(xiàn)形式狀態(tài)遷移表,如表2 所示。(原文件名 :表 2 時(shí)鐘程序狀態(tài)遷移表.jpg)狀態(tài)機(jī)應(yīng)用的注意事項(xiàng)基于狀態(tài)機(jī)的程序調(diào)度機(jī)制,其應(yīng)用的難點(diǎn)并不在于對(duì)狀態(tài)機(jī)概
8、念的理解,而在于對(duì)系統(tǒng)工作狀態(tài)的合理劃分。初學(xué)者往往會(huì)把某個(gè) “程序動(dòng)作 ”當(dāng)作是一種 “狀態(tài) ”來處理。我稱之為 “偽態(tài) ”。那么如何區(qū)分 “動(dòng)作 ”和“狀態(tài)”。本匠人的心得是看二者的本質(zhì): “動(dòng)作 ”是不穩(wěn)定的,即使沒有條件的觸發(fā), “動(dòng)作 ”一旦執(zhí)行完畢就結(jié)束了;而 “狀態(tài) ”是相對(duì)穩(wěn)定的,如果沒有外部條件的觸發(fā),一個(gè)狀態(tài)會(huì)一直持續(xù)下去。初學(xué)者的另一種比較致命的錯(cuò)誤,就是在狀態(tài)劃分時(shí)漏掉一些狀態(tài)。我稱之為“漏態(tài) ”。“偽態(tài) ”和“漏態(tài) ”這兩種錯(cuò)誤的存在,將會(huì)導(dǎo)致程序結(jié)構(gòu)的渙散。因此要特別小心避免。更復(fù)雜的狀態(tài)機(jī)前面介紹的是一種簡(jiǎn)單的狀態(tài)結(jié)構(gòu)。它只有一級(jí),并且只有一維,如圖3 所示。(原
9、文件名 :圖 3 線性狀態(tài)機(jī)結(jié)構(gòu).jpg)如果有必要,我們可以建立更復(fù)雜的狀態(tài)機(jī)模型。1 多級(jí)狀態(tài)結(jié)構(gòu)狀態(tài)機(jī)可以是多級(jí)的。在分層的多級(jí)狀態(tài)機(jī)系統(tǒng)里面,一個(gè)“父狀態(tài) ”下可以劃分多個(gè)“子狀態(tài) ”,這些子狀態(tài)共同擁有上級(jí)父狀態(tài)的某些共性,同時(shí)又各自擁有自己的一些個(gè)性。在某些狀態(tài)下,還可以進(jìn)一步劃分子狀態(tài)。比如,我們可以把前面的時(shí)鐘例子修改如下:把所有和時(shí)鐘功能有關(guān)的狀態(tài),合并成1 個(gè)一級(jí)狀態(tài)。在這個(gè)狀態(tài)下,又可以劃分出3 個(gè)二級(jí)子狀態(tài),分別為顯示時(shí)間、設(shè)置小時(shí)、設(shè)置分鐘;同樣,我們也可以把所有和鬧鐘功能有關(guān)的狀態(tài),合并成1 個(gè)一級(jí)狀態(tài)。在這個(gè)狀態(tài)下,再劃分出4個(gè)二級(jí)子狀態(tài),分別為顯示鬧鐘、設(shè)置“時(shí)
10、”、設(shè)置 “分”、設(shè)置鳴叫時(shí)間。我們需要用另一個(gè)狀態(tài)變量(寄存器)來表示這些子狀態(tài)。子狀態(tài)下面當(dāng)然還可以有更低一級(jí)的孫狀態(tài)(子子孫孫無窮盡也) ,從而將整個(gè)狀態(tài)體系變成了樹狀多級(jí)狀態(tài)結(jié)構(gòu),如圖4 所示。(原文件名 :圖 4 樹狀多級(jí)狀態(tài)結(jié)構(gòu).jpg)2 多維狀態(tài)結(jié)構(gòu)狀態(tài)結(jié)構(gòu)也可以是多維的。從不同的角度對(duì)系統(tǒng)進(jìn)行狀態(tài)的劃分,這些狀態(tài)的某些特性是交叉的。比如,在按照按鍵和顯示劃分狀態(tài)的同時(shí),又按照系統(tǒng)的工作進(jìn)程做出另一種狀態(tài)劃分。這兩種狀態(tài)劃分同時(shí)存在,相互交叉,從而構(gòu)成了二維的狀態(tài)結(jié)構(gòu)空間。舉一個(gè)這方面的例子,如:空調(diào)遙控器,如圖5 所示。(原文件名 :圖 5 多維狀態(tài)機(jī)結(jié)構(gòu).jpg)同樣,我們也可以構(gòu)建三維、四維甚至更多維的狀態(tài)結(jié)構(gòu)。每一維的狀態(tài)都需要用一個(gè)狀態(tài)變量(寄存器)來表示。無論多級(jí)狀態(tài)結(jié)構(gòu)和多維狀態(tài)結(jié)構(gòu)看上去多么迷人,匠人的忠告是:我們依然要盡可能地簡(jiǎn)化狀態(tài)結(jié)構(gòu),能用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025設(shè)備轉(zhuǎn)讓合同
- 2025合作研發(fā)合同范本模板
- 2025版最基本的房屋租賃合同模板
- 2025年混懸劑項(xiàng)目建議書
- 2025年生物法殼聚糖項(xiàng)目合作計(jì)劃書
- 2025年微機(jī)保護(hù)測(cè)控裝置項(xiàng)目建議書
- 2025年工業(yè)索類合作協(xié)議書
- 伸縮看臺(tái)施工方案
- 地毯安裝施工方案
- 錨索工施工方案
- 美國加征關(guān)稅從多個(gè)角度全方位解讀關(guān)稅課件
- “皖南八?!?024-2025學(xué)年高一第二學(xué)期期中考試-英語(譯林版)及答案
- 一例脂肪液化切口的護(hù)理
- 2025屆嘉興市高三語文二模作文解析:智慧不會(huì)感到孤獨(dú)
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 【MOOC】機(jī)械原理-西北工業(yè)大學(xué) 中國大學(xué)慕課MOOC答案
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
- 機(jī)關(guān)事業(yè)單位退休人員養(yǎng)老金領(lǐng)取資格確認(rèn)表
- 第五屆“國藥工程杯”全國大學(xué)生制藥工程設(shè)計(jì)競(jìng)賽
- 柔性主動(dòng)防護(hù)網(wǎng)分項(xiàng)工程質(zhì)量檢驗(yàn)評(píng)定表
- 中機(jī)2015~2016年消防系統(tǒng)維保養(yǎng)護(hù)年度總結(jié)報(bào)告
評(píng)論
0/150
提交評(píng)論