




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、狀態機思路在單片機程序設計中的應用狀態機的概念狀態機是軟件編程中的一個重要概念。比這個概念更重要的是對它的靈活應用。 在一個思路活晰而且高效的程序中,必然有狀態機的身影浮現。比如說一個按鍵命令解析程序,就可以被看做狀態機:本來在A狀態下,觸發一 個按鍵后切換到了 B狀態;再觸發另一個鍵后切換到 C狀態,或者返回到A狀態。 這就是最簡單的按鍵狀態機例子。 實際的按鍵解析程序會比這更復雜些, 但這不 影響我們對狀態機的認識。進一步看,擊鍵動作本身也可以看做一個狀態機。一個細小的擊鍵動作包含了 : 釋放、抖動、閉合、抖動和重新釋放等狀態。同樣,一個申行通信的時序(不管它是遵循何種協議,標準申口也好、
2、I2C也好; 也不管它是有線的、還是紅外的、無線的)也都可以看做由一系列有限的狀態構 成。顯示掃描程序也是狀態機;通信命令解析程序也是狀態機;甚至連繼電器的吸合 /釋放控制、發光管(LED的亮/滅控制乂何嘗不是個狀態機。當我們打開思路,把狀態機作為一種思想導入到程序中去時,就會找到解決問題 的一條有效的捷徑。有時候用狀態機的思維去思考程序該干什么,比用控制流程 的思維去思考,可能會更有效。這樣一來狀態機便有了更實際的功用。程序其實就是狀態機。也許你還不理解上面這句話。請想想看,計算機的大廈不就是建立在“0”和“1” 兩個基本狀態的地基之上么?狀態機的要素狀態機可歸納為4個要素,即現態、條件、動
3、作、次態。這樣的歸納,主要是出 丁對狀態機的內在因果關系的考慮。“現態”和“條件”是因,“動作”和“次態” 是果。詳解如下: 現態:是指當前所處的狀態。 條件:乂稱為“事件”。當一個條件被滿足,將會觸發一個動作,或者執行一 次狀態的遷移。 動作:條件滿足后執行的動作。動作執行完畢后,可以遷移到新的狀態,也可 以仍舊保持原狀態。動作不是必需的,當條件滿足后,也可以不執行任何動作, 直接遷移到新狀態。 次態:條件滿足后要遷往的新狀態。“次態”是相對丁 “現態”而言的,“次態” 一旦被激活,就轉變成新的“現態” 了。如果我們進一步歸納,把“現態”和“次態”統一起來,而把“動作”忽略(降 格處理),則
4、只剩下兩個最關鍵的要素,即:狀態、遷移條件。狀態機的表示方法有許多種,我們可以用文字、圖形或表格的形式來表示一個狀 態機 純粹用文字描述是很低效的,所以就不介紹了。接下來先介紹圖形的方式。狀態遷移圖(STDo圖1狀態遷移圖狀態遷移圖(STD,是一種描述系統的狀態、以及相互轉化關系的圖形方式。狀 態遷移圖的畫法有許多種,不過一般都大同小異。我們結合一個例子來說明一下 它的畫法,如圖1所示 狀態框:用方框表示狀態,包括所謂的“現態”和“次態”。 條件及遷移箭頭:用箭頭表小狀態遷移的方向,并在該箭頭上標注觸發條件。節點圓圈:當多個箭頭指向一個狀態時,可以用節點符號(小圓圈)連接匯總。動作框:用橢圓框
5、表示。 附加條件判斷框:用六角菱形框表示。狀態遷移圖和我們常見的流程圖相比有著本質的區別, 具體體現為:在流程圖中, 箭頭代表了程序PC指針的跳轉;而在狀態遷移圖中,箭頭代表的是狀態的改變。我們會發現,這種狀態遷移圖比普通程序流程圖更簡練、直觀、易懂。這正是我們需要達到的目的。狀態遷移表除了狀態遷移圖,我們還可以用表格的形式來表示狀態之間的關系。這種表一般 稱為狀態遷移表。表1就是前面介紹的那張狀態遷移圖的另一種描述形式。表1狀態遷移表采用表格方式來描述狀態機,優點是可容納更多的文字信息。 例如,我們不但 可以在狀態遷移表中描述狀態的遷移關系, 還可以把每個狀態的特征描述也包含 在內。如果表格
6、內容較多,過丁臃腫不利丁閱讀,我們也可以將狀態遷移表進行拆分 經過拆分后的表格根據其具體內容,表格名稱也有所變化。 比如,我們可以把狀態特征和遷移關系分開列表。 被單獨拆分出來的描述狀態 特征的表格,也可以稱為“狀態真值表”。這其中比較常見的就是把每個狀態的 顯示內容單獨列表。這種描述每個狀態顯示內容的表稱之為“顯示真值表”。同樣,我們把單獨表述基丁按鍵的狀態遷移表稱為“按鍵功能真值表”。另外,如果每一個狀態包含的信息量過多,我們也可以把每個狀態單獨列表。 由此可見,狀態遷移表作為狀態遷移圖的有益補充,它的表現形式是靈活的。 狀態遷移表優點是信息涵蓋面大, 缺點是視覺上不夠直觀,因此它并不能取
7、代 狀態遷移圖。比較理想的是將圖形和表格結合應用。 用圖形展現宏觀,用表格說 明細節。二者互為參照,相得益彰。用狀態機思路實現一個時鐘程序接下來,我將就狀態機的應用,結合流程圖、狀態遷移圖和狀態遷移,舉一個實 際例子。下面這張圖是一個時鐘程序的狀態遷移圖,如圖 2所小。圖2時鐘程序狀態遷移圖把這張圖稍做歸納,就可以得到它的另一種表現形式一一狀態遷移表,如表2所小0表2時鐘程序狀態遷移表:鼻-5i «卵I*普iLJiMjflQIz蚌轎節1:折 i 4'i 函->fl 'AC X- %F itm,lre*)ID,i廈1祐rw刀B狀態機應用的注意事項基丁狀態機的程序調
8、度機制,其應用的難點并不在丁對狀態機概念的理解,而在于對系統工作狀態的合理劃分。初學者往往會把某個“程序動作”當作是一種“狀態”來處理。我稱之為“偽態” 0 那么如何區分“動作”和“狀態”。本匠人的心得是看二者的本質:“動作”是不 穩定的,即使沒有條件的觸發,“動作” 一旦執行完畢就結束了;而“狀態”是 相對穩定的,如果沒有外部條件的觸發,一個狀態會一直持續下去。初學者的另一種比較致命的錯誤,就是在狀態劃分時漏掉一些狀態。我稱之為“漏 態”。“偽態”和“漏態”這兩種錯誤的存在,將會導致程序結構的渙散。因此要特別 小心避免。更復雜的狀態機前面介紹的是一種簡單的狀態結構。它只有一級,并且只有一維,
9、如圖3所示圖3線性狀態機結構如果有必要,我們可以建立更復雜的狀態機模型 1多級狀態結構狀態機可以是多級的。在分層的多級狀態機系統里面,一個“父狀態”下可以劃 分多個“子狀態”,這些子狀態共同擁有上級父狀態的某些共性,同時乂各自擁有自己的一些個性。在某些狀態下,還可以進一步劃分子狀態。比如,我們可以把前面的時鐘例子修 改如下:把所有和時鐘功能有關的狀態,合并成1個一級狀態。在這個狀態下,乂可以劃分出3個二級子狀態,分別為顯示時間、設置小時、設置分鐘; 同樣,我們也可以把所有和鬧鐘功能有關的狀態,合并成 1個一級狀態。在這個 狀態下,再劃分出4個二級子狀態,分別為顯示鬧鐘、設置“時”、設置“分”、
10、 設置鳴叫時間。我們需要用另一個狀態變量(寄存器)來表示這些子狀態子狀態下面當然還可以有更低一級的孫狀態(子子孫孫無窮盡也),從而將整個狀態體系變成了樹狀多級狀態結構,如圖 4所示。秒表功能枕態狀志圖4樹狀多級狀態結構2多維狀態結構狀態結構也可以是多維的。從不同的角度對系統進行狀態的劃分,這些狀態的某 些特性是交義的。比如,在按照按鍵和顯示劃分狀態的同時,乂按照系統的工作 進程做出另一種狀態劃分。這兩種狀態劃分同時存在,相互交義,從而構成了二 維的狀態結構空間。舉一個這方面的例子,如:空調遙控器,如圖 5所示。圖5多維狀態機結構每一維的狀態都需要同樣,我們也可以構建三維、四維甚至更多維的狀態結構 用一個狀態變量(寄存器)來表示。無論多級狀態結構和多維狀態結構看上去多么迷人, 匠人的忠告是:我們依然要 盡可能地簡化狀態結構,能用單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 激光跟蹤儀與D掃描技術考核試卷
- 疊拼別墅裝飾施工方案
- 比較分析2025年證券從業資格證考試試題及答案
- 2025年【河北省安全員A證】模擬考試題及答案
- 石油開采業的能源轉型與碳排放削減考核試卷
- 反不正當競爭考核試卷
- 2024年項目管理專業人士考試重要知識點試題及答案
- 屋面鋼模板施工方案
- 2025年關于證券從業資格證的深度探索試題及答案
- 珠寶首飾行業綠色發展策略考核試卷
- 隧道高空作業施工方案
- 雨季三防知識培訓
- 危險性較大的分部分項工程專項施工方案嚴重缺陷清單(試行)
- 2025年上半年第二次商務部國際貿易經濟合作研究院招聘7人重點基礎提升(共500題)附帶答案詳解
- 2025年陜西省土地工程建設集團有限責任公司招聘筆試參考題庫附帶答案詳解
- 第7課《不甘屈辱 奮勇抗爭》第1課時 虎門銷煙 課件 五年級道德與法治下冊 統編版
- DB13-T5742-2023醇基燃料使用安全規范
- 《慢性阻塞性肺疾病的健康宣教》課件
- 江蘇省蘇北四市(徐州、宿遷、淮安、連云港) 2025屆高三第一次調研考試物理試題(含答案)
- 2025年廣投資本管理有限公司招聘筆試參考題庫含答案解析
- 灌漿作業安全操作規程(3篇)
評論
0/150
提交評論