青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++分析研究  
C++
日歷
<2013年10月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
統(tǒng)計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
  一、狀態(tài)機實現(xiàn)的要素
 
   首先,分析一下一個普通的狀態(tài)機究竟要實現(xiàn)哪些內(nèi)容。
 
   狀態(tài)機存儲從開始時刻到現(xiàn)在的變化,并根據(jù)當前輸入,決定下一個狀態(tài)。這意味著,狀態(tài)機要存儲狀態(tài)、獲得輸入(我們把它叫做跳轉條件)、做出響應。托福改分
 
   如上所示,{s1, s2, s3}均為狀態(tài),箭頭c1/a1表示在s1狀態(tài)、輸入為c1時,跳轉到s2,并進行a1操作。托福答案
 
   最下方為一組輸入,狀態(tài)機應做出如下反應:
 
   當前狀態(tài) 輸入 下一個狀態(tài) 動作
 
   s1 c1 s2 a1
 
   s2 c2 s3 a2
 
   s3 c1 s2 a3
 
   s2 c2 s3 a2
 
   s3 c1 s2 a3
 
   s2 c1 s_trap a_trap
 
   s_trap c1 s_trap a_trap
 
   當某個狀態(tài)遇到不能識別的輸入時,就默認進入陷阱狀態(tài),在陷阱狀態(tài)中,不論遇到怎樣的輸入都不能跳出。
 
   為了表達上面這個自動機,我們定義它們的狀態(tài)和輸入類型:
 
   typedef int state;
 
   typedef int condition;
 
   #define
 
   STATES 4
 
   #define
 
   STATE1 0
 
   #define
 
   STATE2 1
 
   #define
 
   STATE3 2
 
   #define
 
   STATETRAP 3
 
   #define
 
   CONDITIONS 2
 
   #define
 
   CONDITION1 0
 
   #define
 
   CONDITION2 1
 
   總結一下,我們需要定義的有狀態(tài)、輸入、行為(動作+下一個狀態(tài)),其中,行為的個數(shù)是"狀態(tài)數(shù)*輸入數(shù)量"(其中有一些是重復的);其中動作一般來說可以用一個函數(shù)指針來實現(xiàn)。
 
   二、具體設計
 
   在嵌入式環(huán)境中,由于存儲空間比較小,因此把它們?nèi)慷x成宏。此外,為了降低執(zhí)行時間的不確定性,我們使用O(1)的跳轉表來模擬狀態(tài)的跳轉。
 
   首先定義跳轉類型:
 
   typedef void (*actiontype)(state
 
   mystate, condition condition);
 
   typedef struct
 
   {
 
   state
 
   next;
 
   actiontype
 
   action;
 
   }
 
   trasition, * ptrasition;
 
   然后按照上圖中的跳轉關系,把三個跳轉加一個陷阱跳轉先定義出來:
 
   //
 
   (s1, c1, s2, a1)
 
   trasition
 
   t1 = {
 
   STATE2,
 
   action1
 
   };
 
   //
 
   (s2, c2, s3, a2)
 
   trasition
 
   t2 = {
 
   STATE3,
 
   action2
 
   };
 
   //
 
   (s3, c1, s2, a3)
 
   trasition
 
   t3 = {
 
   STATE2,
 
   action3
 
   };
 
   //
 
   (s, c, trap, a1)
 
   trasition
 
   tt = {
 
   STATETRAP,
 
   actiontrap
 
   };
 
   其中的動作,由用戶自己完成,在這里僅定義一條輸出語句。
 
   void action1(State
 
   state, Condition condition)
 
   {
 
   printf("Action
 
   1 triggered.\n");
 
   }
 
   1
 
   最后定義跳轉表:
 
   asition
 
   transition_table[STATES][CONDITIONS] = {
 
   /*
 
   c1, c2*/
 
   /*
 
   s1 */&t1,
 
   &tt,
 
   /*
 
   s2 */&tt,
 
   &t2,
 
   /*
 
   s3 */&t3,
 
   &tt,
 
   /*
 
   st */&tt,
 
   &tt,
 
   };
 
   即可表達上文中的跳轉關系。
 
   最后定義狀態(tài)機,如果不考慮多任務請求,那么狀態(tài)機僅需要存儲當前狀態(tài)便行了。例如:
 
   typedef struct
 
   {
 
   State
 
   current;
 
   }
 
   StateMachine, * pStateMachine;
 
   State
 
   step(pStateMachine machine, Condition condition)
 
   {
 
   pTrasition
 
   t = transition_table[machine->current][condition];
 
   (*(t->action))(machine->current,
 
   condition);
 
   machine->current
 
   = t->next;
 
   return machine->current;
 
   }
 
   總結:我們現(xiàn)在設計實現(xiàn)好了一個狀態(tài)機,然后要給這個狀態(tài)機特定的輸入,看看狀態(tài)機的運轉情況,以上面圖中的那個狀態(tài)機為例,我們輸入的序列是0和1分別代表c1和C2,然后狀態(tài)s1,s2分別對應0,1.用程序實現(xiàn)這個內(nèi)容如下
 
   三、程序實現(xiàn)
 
   程序清單:小型狀態(tài)機的實現(xiàn)
 
   [cpp
 
   #include<stdio.h>
 
   #include<unistd.h>
 
   #include<stdlib.h>
 
   typedef int state;
 
   typedef int condition;
 
   #define STATENUM 4
 
   #define STATE1 0
 
   #define STATE2 1
 
   #define STATE3 2
 
   #define STATETRAP 3
 
   #define CONDITIONS 2
 
   #define CONDITION1 0
 
   #define CONDITION2 1
 
   typedef void (* actiontype)(state mystate,condition mycondition);
 
   typedef struct{
 
   state next;
 
   actiontype action;
 
   }trasition, *ptrasition;
 
   void action1(state mystate,condition myconditon);
 
   void action2(state mystate,condition myconditon);
 
   void action3(state mystate,condition myconditon);
 
   void actiontrap(state mystate,condition myconditon);
 
   trasition t1={
 
   STATE2,action1
 
   };
 
   trasition t2={
 
   STATE3,action2
 
   };
 
   trasition t3={
 
   STATE2,action3
 
   };
 
   trasition tt={
 
   STATETRAP,actiontrap
 
   };
 
   void action1(state mystate,condition myconditon){
 
   printf("action1 one triggered\n");
 
   }
 
   void action2(state mystate,condition myconditon){
 
   printf("action2 one triggered\n");
 
   }
 
   void action3(state mystate,condition myconditon){
 
   printf("action3 one triggered\n");
 
   }
 
   void actiontrap(state mystate,condition myconditon){
 
   printf("actiontrap one triggered\n");
 
   }
 
   ptrasition transition_table[STATENUM][CONDITIONS] = {
 
   /* c1, c2*/
 
   /* s1 */&t1, &tt,
 
   /* s2 */&tt, &t2,
 
   /* s3 */&t3, &tt,
 
   /* st */&tt, &tt,
 
   };
 
   typedef struct
 
   {
 
   state current;
 
   } StateMachine, * pStateMachine;
 
   state step(pStateMachine machine, condition mycondition)
 
   {
 
   ptrasition t = transition_table[machine->current][mycondition];
 
   (*(t->action))(machine->current, mycondition);
 
   machine->current = t->next;
 
   printf("the current state is %d\n",t->next );
 
   return machine->current;
 
   }
 
   int main(int argc, char *argv[])
 
   {
 
   StateMachine mymachine;
 
   mymachine.current=STATE1;
 
   int mycon;
 
   char ch;
 
   while(1){
 
   scanf("%d",&mycon);
 
   step(&mymachine,mycon);
 
   }
 
   return 0;
 
   }
 
 
 
posted on 2013-10-14 15:42 HAOSOLA 閱讀(1876) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
PK10開獎 PK10開獎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区在线观看免费观看电影高清| 亚洲区一区二| 欧美一区二区久久久| 一本色道久久99精品综合| 欧美日韩成人综合| 亚洲天天影视| 香蕉久久国产| 午夜精品国产更新| 国产一区二区三区日韩| 麻豆乱码国产一区二区三区| 久久精品视频va| 亚洲国产精品福利| 亚洲精品免费网站| 欧美日韩一区二区三区视频| 亚洲一区二区影院| 欧美在线视频导航| 亚洲精品久久久久久久久久久| 亚洲精品久久久久久久久久久久久| 欧美精品久久久久久久| 亚洲综合999| 久久理论片午夜琪琪电影网| 亚洲日韩成人| 亚洲欧美成人精品| 亚洲人线精品午夜| 亚洲女人小视频在线观看| 在线观看亚洲精品视频| 亚洲麻豆av| 国产午夜精品理论片a级探花| 免费av成人在线| 欧美日韩国产成人在线观看| 欧美中文字幕| 欧美国产极速在线| 久久亚洲图片| 国产精品免费一区豆花| 亚洲高清久久| 激情成人在线视频| 亚洲最新色图| 亚洲精品国产精品国产自| 午夜日韩福利| 亚洲在线视频网站| 欧美电影免费观看| 久久久久久久久久看片| 欧美午夜精品久久久久久孕妇| 美女免费视频一区| 国产麻豆综合| 一区二区三区成人精品| 亚洲欧洲日产国码二区| 久久国产精品毛片| 欧美一区二区播放| 欧美日韩在线一二三| 欧美黄色aaaa| 一区一区视频| 久久精品国产精品亚洲综合| 亚洲欧美文学| 欧美性色视频在线| 日韩小视频在线观看| 亚洲精品一区二区三区不| 久久久国产亚洲精品| 性高湖久久久久久久久| 亚洲综合精品四区| 中文在线资源观看网站视频免费不卡 | 美女主播视频一区| 久久久人成影片一区二区三区 | 久久久国产91| 久久精品国产亚洲aⅴ| 国产精品久久久久久久久久妞妞 | 欧美一区二区三区在线观看视频 | 久久精品夜夜夜夜久久| 国产精品人人做人人爽人人添| 亚洲日本va午夜在线电影| 亚洲国产精品电影在线观看| 久久麻豆一区二区| 美女999久久久精品视频| 黄色日韩在线| 久久综合九色综合久99| 嫩草影视亚洲| 亚洲日本欧美| 欧美日韩国语| 亚洲少妇一区| 欧美一区影院| 一区二区在线视频播放| 老色鬼精品视频在线观看播放| 欧美风情在线观看| 亚洲精品国产精品国自产观看浪潮 | 国产精品v欧美精品v日本精品动漫 | 亚洲一区二区三区涩| 欧美亚州在线观看| 亚洲欧美一区二区三区在线| 久久精品免费观看| 亚洲大胆人体视频| 这里只有精品在线播放| 亚洲影视综合| 国产亚洲综合精品| 免费一级欧美片在线播放| 亚洲精品免费在线播放| 午夜精品福利在线| 怡红院av一区二区三区| 欧美sm极限捆绑bd| 亚洲自拍啪啪| 亚洲成人资源网| 国产麻豆视频精品| 久久九九久久九九| 亚洲人成艺术| 久久国产欧美| 亚洲精品国产视频| 国产精品一区三区| 蜜桃av一区二区三区| 夜夜嗨av一区二区三区| 久久免费视频这里只有精品| 亚洲狼人综合| 韩国欧美国产1区| 欧美日韩色婷婷| 久久视频在线看| 亚洲一区二区影院| 亚洲欧洲一区二区三区| 久久影音先锋| 欧美一级理论片| 99精品视频免费全部在线| 国产午夜精品麻豆| 欧美日韩视频专区在线播放| 久久久综合网| 欧美在线播放一区| 一级日韩一区在线观看| 亚洲成色777777女色窝| 久久久久久一区二区| 亚洲影院免费观看| 亚洲精品资源| 亚洲精品123区| 激情久久婷婷| 国产在线视频不卡二| 国产精品女人久久久久久| 欧美日韩国产精品自在自线| 久久久一区二区三区| 欧美综合国产| 久久高清国产| 欧美在线你懂的| 午夜精品久久久久久久久久久久久| 亚洲美女精品成人在线视频| 欧美电影免费观看网站| 久久资源在线| 久久久噜噜噜久久人人看| 久久超碰97中文字幕| 先锋a资源在线看亚洲| 亚洲午夜av在线| 亚洲一区二区三区四区视频| 一区二区三区免费观看| 一区二区三区偷拍| 在线一区亚洲| 亚洲女人天堂成人av在线| 亚洲欧美成人一区二区在线电影| 亚洲视频你懂的| 亚洲综合精品四区| 欧美在线一区二区三区| 欧美在线不卡| 久久综合狠狠综合久久激情| 免播放器亚洲一区| 亚洲电影免费观看高清完整版在线观看 | 久久久久久成人| 久久综合九色综合欧美狠狠| 老色鬼精品视频在线观看播放| 久久这里只有| 欧美激情va永久在线播放| 亚洲国产欧美在线人成| 亚洲免费观看高清完整版在线观看| 99精品欧美一区二区三区综合在线 | 久久香蕉国产线看观看av| 美女性感视频久久久| 亚洲大片在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲一区二区三区精品在线| 性做久久久久久免费观看欧美| 欧美中文在线视频| 欧美不卡一卡二卡免费版| 欧美日韩激情小视频| 国产日韩欧美一区| 亚洲国产精品va在线看黑人动漫 | 亚洲精品国产欧美| 亚洲免费一在线| 久久综合狠狠| 一本色道久久综合亚洲精品婷婷| 亚洲在线中文字幕| 久久久综合精品| 国产精品久久毛片a| 精品成人在线观看| 亚洲一区二区三区欧美| 狂野欧美激情性xxxx| 日韩亚洲欧美成人一区| 久久久久久夜精品精品免费| 欧美连裤袜在线视频| 黄色国产精品| 亚洲欧美日韩中文视频| 欧美夫妇交换俱乐部在线观看| 亚洲少妇一区| 欧美成人性生活| 国语自产精品视频在线看8查询8| 99国产精品久久久久久久久久| 久久成人在线| 亚洲桃花岛网站| 欧美精品在线观看一区二区| 国产一区二区三区不卡在线观看|