一種狀態(tài)機(jī)管理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及一種計(jì)算機(jī)技術(shù),特別是設(shè)及一種狀態(tài)機(jī)管理方法及系統(tǒng)。
【背景技術(shù)】
[0002] 有限狀態(tài)機(jī)又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)W及在該些狀 態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型,狀態(tài)存儲(chǔ)關(guān)于過(guò)去的信息,就是說(shuō);它反映從系統(tǒng) 開始到現(xiàn)在時(shí)刻的輸入變化。轉(zhuǎn)移指示狀態(tài)變更,并且用必須滿足來(lái)確使轉(zhuǎn)移發(fā)生的條件 來(lái)描述它,動(dòng)作是在給定時(shí)刻要進(jìn)行的活動(dòng)的描述。有多種類型的動(dòng)作。在嵌入式系統(tǒng)中, 通常要求系統(tǒng)實(shí)現(xiàn)短小精煉,現(xiàn)有的對(duì)于狀態(tài)機(jī)實(shí)現(xiàn)的解決方案采用switch/case或者 if/else,該無(wú)意是最直觀的方式,使用一堆條件判斷,會(huì)編程的人都可W做到,對(duì)簡(jiǎn)單小巧 的狀態(tài)機(jī)來(lái)說(shuō)最合適,但是毫無(wú)疑問(wèn),該樣的方式比較原始,當(dāng)狀態(tài)機(jī)中的狀態(tài)和轉(zhuǎn)移數(shù)量 比較大時(shí),系統(tǒng)中的狀態(tài)機(jī)將變得難W維護(hù)。
[0003] 鑒于此,如何找到一種高效簡(jiǎn)潔的狀態(tài)機(jī)管理方法及系統(tǒng)成為了本領(lǐng)域技術(shù)人員 亟待解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0004] 鑒于W上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種狀態(tài)機(jī)管理方法及系 統(tǒng),用于解決現(xiàn)有技術(shù)中狀態(tài)機(jī)管理上存在的問(wèn)題。
[0005] 為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種狀態(tài)機(jī)管理方法,所述狀態(tài)機(jī) 管理方法包括;根據(jù)狀態(tài)機(jī)中的狀態(tài)設(shè)置狀態(tài)數(shù)組,每個(gè)狀態(tài)對(duì)應(yīng)狀態(tài)數(shù)組中的一個(gè)狀態(tài) 數(shù)組元素,所述狀態(tài)數(shù)組的字段包括:狀態(tài)動(dòng)作、轉(zhuǎn)移數(shù)量W及轉(zhuǎn)移事件數(shù)組,所述轉(zhuǎn)移事 件數(shù)組包括所述轉(zhuǎn)移數(shù)量個(gè)元素;所述轉(zhuǎn)移事件數(shù)組的字段包括:轉(zhuǎn)移事件W及轉(zhuǎn)移狀 態(tài);預(yù)設(shè)狀態(tài)機(jī)的當(dāng)前狀態(tài);狀態(tài)檢測(cè)時(shí),依次檢測(cè)當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的 每一個(gè)所述轉(zhuǎn)移事件數(shù)組元素;當(dāng)所述轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真時(shí),設(shè)置當(dāng)前狀態(tài)為 所述轉(zhuǎn)移事件元素的轉(zhuǎn)移狀態(tài),中斷所述狀態(tài)檢測(cè)。
[0006] 可選地,所述狀態(tài)檢測(cè)包括定時(shí)狀態(tài)檢測(cè)。
[0007] 可選地,所述狀態(tài)機(jī)管理方法還包括;當(dāng)狀態(tài)機(jī)的狀態(tài)發(fā)生改變時(shí),相應(yīng)的更改所 述狀態(tài)數(shù)組中對(duì)應(yīng)的狀態(tài)數(shù)組元素,所述更改包括對(duì)所述狀態(tài)數(shù)組元素的刪除、增加、修改 中的任一種。
[000引可選地,對(duì)所述狀態(tài)數(shù)組元素的修改包括對(duì)所述狀態(tài)數(shù)組元素的轉(zhuǎn)移事件數(shù)組元 素的刪除、增加、修改中的任一種,當(dāng)對(duì)所述狀態(tài)數(shù)組元素的轉(zhuǎn)移事件數(shù)組元素的刪除或者 增加時(shí),相應(yīng)的修改所述狀態(tài)數(shù)組元素的轉(zhuǎn)移數(shù)量。
[0009] 可選地,所述狀態(tài)機(jī)管理方法還包括;執(zhí)行當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的 狀態(tài)動(dòng)作。
[0010] 可選地,所述狀態(tài)機(jī)管理方法還包括;當(dāng)所述轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真時(shí),設(shè) 置當(dāng)前狀態(tài)為所述轉(zhuǎn)移事件元素的轉(zhuǎn)移狀態(tài),同時(shí)設(shè)置當(dāng)前狀態(tài)修改標(biāo)志為真,當(dāng)所述當(dāng) 前狀態(tài)修改標(biāo)志為真時(shí),執(zhí)行當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的狀態(tài)動(dòng)作。
[0011] 本發(fā)明還提供一種狀態(tài)機(jī)管理系統(tǒng),所述狀態(tài)機(jī)管理系統(tǒng)包括:狀態(tài)機(jī)初始模塊, 用于初始化狀態(tài)機(jī),包括;根據(jù)狀態(tài)機(jī)中的狀態(tài)設(shè)置狀態(tài)數(shù)組,每個(gè)狀態(tài)對(duì)應(yīng)狀態(tài)數(shù)組中的 一個(gè)狀態(tài)數(shù)組元素,所述狀態(tài)數(shù)組的字段包括:狀態(tài)動(dòng)作、轉(zhuǎn)移數(shù)量W及轉(zhuǎn)移事件數(shù)組,所 述轉(zhuǎn)移事件數(shù)組包括所述轉(zhuǎn)移數(shù)量個(gè)元素;所述轉(zhuǎn)移事件數(shù)組的字段包括:轉(zhuǎn)移事件W及 轉(zhuǎn)移狀態(tài);預(yù)設(shè)狀態(tài)機(jī)的當(dāng)前狀態(tài);狀態(tài)機(jī)管理模塊,用于進(jìn)行狀態(tài)檢測(cè),所述狀態(tài)檢測(cè)包 括:依次檢測(cè)當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的每一個(gè)所述轉(zhuǎn)移事件數(shù)組元素;當(dāng)所述 轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真時(shí),設(shè)置當(dāng)前狀態(tài)為所述轉(zhuǎn)移事件元素的轉(zhuǎn)移狀態(tài),中斷所 述狀態(tài)檢測(cè)。
[0012] 可選地,所述狀態(tài)檢測(cè)包括定時(shí)狀態(tài)檢測(cè)。
[0013] 可選地,所述狀態(tài)機(jī)管理系統(tǒng)還包括狀態(tài)信息修改模塊:用于當(dāng)狀態(tài)機(jī)的狀態(tài)發(fā) 生改變時(shí),相應(yīng)的更改所述狀態(tài)數(shù)組中對(duì)應(yīng)的狀態(tài)數(shù)組元素,所述更改包括對(duì)所述狀態(tài)數(shù) 組元素的刪除、增加、修改中的任一種。
[0014] 可選地,對(duì)所述狀態(tài)數(shù)組元素的修改包括對(duì)所述狀態(tài)數(shù)組元素的轉(zhuǎn)移事件數(shù)組元 素的刪除、增加、修改中的任一種,當(dāng)對(duì)所述狀態(tài)數(shù)組元素的轉(zhuǎn)移事件數(shù)組元素的刪除或者 增加時(shí),相應(yīng)的修改所述狀態(tài)數(shù)組元素的轉(zhuǎn)移數(shù)量。
[0015] 可選地,狀態(tài)機(jī)管理模塊還用于執(zhí)行當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的狀態(tài)動(dòng) 作。
[0016] 可選地,狀態(tài)機(jī)管理模塊還用于;當(dāng)所述轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真時(shí),設(shè)置當(dāng) 前狀態(tài)為所述轉(zhuǎn)移事件元素的轉(zhuǎn)移狀態(tài),同時(shí)設(shè)置當(dāng)前狀態(tài)修改標(biāo)志為真,當(dāng)所述當(dāng)前狀 態(tài)修改標(biāo)志為真時(shí),執(zhí)行當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的狀態(tài)動(dòng)作。
[0017] 如上所述,本發(fā)明的一種狀態(tài)機(jī)管理方法及系統(tǒng),具有W下有益效果;改進(jìn)現(xiàn)有的 技術(shù)中的缺點(diǎn),提高狀態(tài)機(jī)管理的效率,同時(shí)能讓開發(fā)者更加靈活的根據(jù)需要對(duì)狀態(tài)進(jìn)行 修改,具有很高的健壯性。該技術(shù)方案尤其適用于嵌入式設(shè)備的開發(fā)中。
【附圖說(shuō)明】
[0018] 圖1顯示為本發(fā)明的狀態(tài)機(jī)管理方法的一實(shí)施例的流程示意圖。
[0019] 圖2顯示為本發(fā)明的狀態(tài)機(jī)管理方法的一實(shí)施例的流程示意圖。
[0020] 圖3顯示為本發(fā)明的狀態(tài)機(jī)管理系統(tǒng)的一實(shí)施例的模塊示意圖。
[0021] 圖4顯示為本發(fā)明的狀態(tài)機(jī)管理系統(tǒng)的一實(shí)施例的模塊示意圖。
[0022] 元件標(biāo)號(hào)說(shuō)明
[0023] 1 狀態(tài)機(jī)管理系統(tǒng)
[0024] 11 狀態(tài)機(jī)初始模塊
[0025] 12 狀態(tài)機(jī)管理模塊
[0026] 13 狀態(tài)信息修改模塊
[0027] S1 ~S3 步驟
【具體實(shí)施方式】
[002引 W下通過(guò)特定的具體實(shí)例說(shuō)明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說(shuō)明書 所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可w通過(guò)另外不同的具體實(shí) 施方式加W實(shí)施或應(yīng)用,本說(shuō)明書中的各項(xiàng)細(xì)節(jié)也可W基于不同觀點(diǎn)與應(yīng)用,在沒(méi)有背離 本發(fā)明的精神下進(jìn)行各種修飾或改變。
[0029] 需要說(shuō)明的是,本實(shí)施例中所提供的圖示僅W示意方式說(shuō)明本發(fā)明的基本構(gòu)想, 遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪 審IJ,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可 能更為復(fù)雜。
[0030] 本發(fā)明提供一種狀態(tài)機(jī)管理方法。該狀態(tài)機(jī)管理方法特別適用于嵌入式設(shè)備中。 在一個(gè)實(shí)施例中,如圖1所示,所述狀態(tài)機(jī)管理方法包括:
[0031] 步驟S1,根據(jù)狀態(tài)機(jī)中的狀態(tài)設(shè)置狀態(tài)數(shù)組,每個(gè)狀態(tài)對(duì)應(yīng)狀態(tài)數(shù)組中的一個(gè)狀 態(tài)數(shù)組元素,所述狀態(tài)數(shù)組的字段包括:狀態(tài)動(dòng)作、轉(zhuǎn)移數(shù)量W及轉(zhuǎn)移事件數(shù)組,所述轉(zhuǎn)移 事件數(shù)組包括所述轉(zhuǎn)移數(shù)量個(gè)元素;所述轉(zhuǎn)移事件數(shù)組的字段包括:轉(zhuǎn)移事件W及轉(zhuǎn)移狀 態(tài);預(yù)設(shè)狀態(tài)機(jī)的當(dāng)前狀態(tài)。
[0032] 在一個(gè)實(shí)施例中,所述狀態(tài)數(shù)組的字段結(jié)構(gòu)的偽代碼如下:
[0033]
[0035] 其中,embeddedFsmeTransition為轉(zhuǎn)移事件結(jié)構(gòu),其具體的字段結(jié)構(gòu)的偽代碼如 下:
[0036]
[0037] 在狀態(tài)機(jī)初始化時(shí),根據(jù)狀態(tài)機(jī)中包括的狀態(tài)設(shè)置狀態(tài)數(shù)組元素,根據(jù)每一個(gè)狀 態(tài)分別設(shè)置相應(yīng)的狀態(tài)數(shù)組元素的字段值。同時(shí),設(shè)置初始狀態(tài),即最初的狀態(tài)機(jī)的當(dāng)前狀 態(tài)。
[003引步驟S2,狀態(tài)檢測(cè)時(shí),依次檢測(cè)當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的每一個(gè)所述 轉(zhuǎn)移事件數(shù)組元素;當(dāng)所述轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真(true)時(shí),設(shè)置當(dāng)前狀態(tài)為所述 轉(zhuǎn)移事件元素的轉(zhuǎn)移狀態(tài),中斷所述狀態(tài)檢測(cè)。在一個(gè)實(shí)施例中,所述狀態(tài)檢測(cè)包括定時(shí)狀 態(tài)檢測(cè)或者依照某種預(yù)設(shè)條件觸發(fā)狀態(tài)檢測(cè)。
[0039] 在一個(gè)實(shí)施例中,采用一個(gè)結(jié)構(gòu)體來(lái)對(duì)狀態(tài)進(jìn)行管理,該個(gè)結(jié)構(gòu)體用于描述運(yùn)行 在的狀態(tài)機(jī)里面的一個(gè)狀態(tài)實(shí)例,它包含描述該個(gè)狀態(tài)機(jī)是否運(yùn)行的標(biāo)志,描述有限狀態(tài) 機(jī)的狀態(tài)改變的標(biāo)志,該個(gè)有限狀態(tài)機(jī)的狀態(tài)的數(shù)量W及狀態(tài)數(shù)組(一個(gè)狀態(tài)對(duì)應(yīng)著一個(gè) 狀態(tài)數(shù)組元素,共有狀態(tài)的數(shù)量個(gè)有效狀態(tài)數(shù)組元素),w及當(dāng)前狀態(tài)對(duì)應(yīng)的轉(zhuǎn)移數(shù)量和轉(zhuǎn) 移事件數(shù)組。其具體的結(jié)構(gòu)體的偽代碼如下所示:
[0040]
[0041] 一個(gè)有限狀態(tài)機(jī)是由一套embeddedFsmeTransition表(數(shù)組)它包含從每一個(gè) 狀態(tài)的轉(zhuǎn)移的信息,和embeddedFsmeState表(數(shù)組)它包含有限狀態(tài)機(jī)的所有狀態(tài)W及 每一個(gè)狀態(tài)對(duì)應(yīng)的轉(zhuǎn)移數(shù)據(jù)的索引。W及embeddedFsmelnstance全局變量,該個(gè)變量用于 包含所有的數(shù)據(jù)W及所有的索引,有限狀態(tài)的核屯、函數(shù)就是用該個(gè)全局變量來(lái)運(yùn)行的。核 屯、函數(shù)用于有限狀態(tài)機(jī)的狀態(tài)的更新。核屯、函數(shù)的偽代碼描述如下:
[0042]
[0043]
[0044] 該個(gè)偽代碼函數(shù)主要是輪詢當(dāng)前狀態(tài)對(duì)應(yīng)的轉(zhuǎn)移表(數(shù)組)和檢查轉(zhuǎn)移事件的發(fā) 生,如果事件觸發(fā),該個(gè)有限狀態(tài)機(jī)的的狀態(tài)就根據(jù)狀態(tài)表(數(shù)組)來(lái)更新,一旦事件觸發(fā), 該個(gè)函數(shù)功能就結(jié)束。
[0045] 有限狀態(tài)機(jī)的主要運(yùn)行函數(shù)如下:
[0046]
[0047] 在一個(gè)實(shí)施例中,如圖2所示,所述狀態(tài)機(jī)管理方法還包括:
[0048] 步驟S3,執(zhí)行當(dāng)前狀態(tài)所對(duì)應(yīng)的狀態(tài)數(shù)組元素中的狀態(tài)動(dòng)作。在一個(gè)實(shí)施例中,所 述狀態(tài)機(jī)管理方法還包括;當(dāng)所述轉(zhuǎn)移事件元素的轉(zhuǎn)移事件為真時(shí),設(shè)置當(dāng)前狀態(tài)為所述 轉(zhuǎn)移事件元素的