利用狀態(tài)機來遍歷FLASH取出指定數(shù)據(jù)

參考資料:
http://blog.csdn.net/v__king__/article/details/71740492 [狀態(tài)機實現(xiàn)的三種方法-C語言]
http://blog.csdn.net/findaway123/article/details/16870927有限狀態(tài)機在程序設(shè)計中作用和意義

為什么要用狀態(tài)機,狀態(tài)機常用于哪里

1.過多的if else帶來結(jié)構(gòu)的過于復(fù)雜
2.改變傳統(tǒng)的'遵循事先設(shè)定的邏輯,從頭到尾地執(zhí)行',可以處理任何順序的事件,并能提供有意義的響應(yīng)——即使這些事件發(fā)生的順序和預(yù)計的不同。有限狀態(tài)機正是為了滿足這方面的要求而設(shè)計的。
3.各種通信協(xié)議發(fā)送方和接受方傳遞數(shù)據(jù)時,一個字節(jié)一個字節(jié)接收比對(下例類似)
4.自底向上解析語法的parser
5.飲料機(數(shù)電課本)
6.正則中關(guān)鍵字過濾,可以用有限自動機推導(dǎo)正則表達式

說了這么多,看看實例吧
實例:從FLAG中取出想要的那一幀數(shù)據(jù)

void found()
{  unsigned char myptr=0;
 int mypage=256;
 unsigned char i =0;
 unsigned char my_tx_buffer[170];
 unsigned char want_day[6];//年
 unsigned char address[6];
 unsigned char cur_state=0;
 unsigned char nxt_state=0;
   for(unsigned i=0;i<170;i++)
     my_tx_buffer[i]=0;
 //如果我要找2018年1月31日12點24分24秒的信息  
     want_day[0]=0x19;
     want_day[1]=0x01;
     want_day[2]=0x31;
     want_day[3]=0x12;
     want_day[4]=0x24;
     want_day[5]=0x24;
     //
     mypage=256;  //數(shù)據(jù)存于256頁至1024頁
     while(1)
  {   
        ReadMemory(address,6,mypage,myptr);  //于mypage頁myptr字節(jié)處讀取至address
        cur_state = nxt_state;   
 switch(cur_state) //狀態(tài)0,剛進入查詢
     {            
       case 0: //在s0狀態(tài)   
       if(address[0]==want_day[0]) //如果年份一樣,那么就執(zhí)行a1動作,并將狀態(tài)轉(zhuǎn)移到s1態(tài); 
       { nxt_state = 1; }
         else
         break; 
      case 1: //在s1狀態(tài)
       if(address[1]==want_day[1]) //如果月份符合 
       { nxt_state = 2; }           
        else
          break;       
      case 2: //在s2狀態(tài)
       if(address[2]==want_day[2]) //如果日符合            
       {nxt_state = 3;}     
       else
         break;
       
       case 3: //在s3狀態(tài)  符合數(shù)據(jù) 取出并保存
       for( i=0;i<6;i++)
         my_tx_buffer[i]=address[i];
         nxt_state = 0 ;
         goto solve;
       
       default:break;
}
myptr+=73;
if(myptr>73)
{myptr=0;
mypage++;
}   
if(mypage>1024)
{
 mypage=256;
 goto solve;
}
}   
solve:  //后續(xù)處理     

     myptr=0;

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容