RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)單的狀態(tài)機(jī)入門(mén)知識(shí)詳解

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 18:06 ? 次閱讀

大家晚上好,今天給大家分享一個(gè)篇關(guān)于狀態(tài)機(jī)的學(xué)習(xí)。為啥突然會(huì)寫(xiě)這個(gè)話題,因?yàn)榻裉煲次恼潞?a href="http://hljzzgx.com/v/" target="_blank">視頻學(xué)習(xí)的時(shí)候,突然看到了“狀態(tài)機(jī)”三個(gè)字,也突然讓我想起了,在剛?cè)肼氁患?a target="_blank">公司的時(shí)候,看產(chǎn)品的源代碼畫(huà)出整個(gè)軟件框架流程圖來(lái),現(xiàn)在我還清晰的記得當(dāng)時(shí)公司產(chǎn)品里面就有用到這個(gè)狀態(tài)機(jī)的用法,但是當(dāng)時(shí)我剛接觸到這個(gè)東西,看了老半天那個(gè)源碼嗎,沒(méi)看懂,因?yàn)槟菚r(shí)候第一次看那么大的工程量代碼,說(shuō)實(shí)話腦袋有點(diǎn)暈暈的,不是很習(xí)慣。所以今天的文章只是帶大家入門(mén)和了解一下?tīng)顟B(tài)機(jī),等你真正在工作當(dāng)中有遇到這個(gè)狀態(tài)機(jī)作為開(kāi)發(fā)需要的話,你再去深入研究。

一、什么是狀態(tài)機(jī)?

1、有限狀態(tài)機(jī):

常說(shuō)的狀態(tài)機(jī)是有限狀態(tài)機(jī)FSM(Finite State Machine)。FSM指的是有有限個(gè)狀態(tài)(一般是一個(gè)狀態(tài)變量的值),這個(gè)機(jī)器同時(shí)能夠從外部接收信號(hào)信息輸入,機(jī)器在接收到外部輸入的信號(hào)后會(huì)綜合考慮當(dāng)前自己的狀態(tài)和用戶輸入的信息,然后機(jī)器做出動(dòng)作:跳轉(zhuǎn)到另一個(gè)狀態(tài)。

舉個(gè)實(shí)際生活例子來(lái)理解一下,比如我們平時(shí)燒開(kāi)水喝,在你沒(méi)燒之前,水的狀態(tài)是液態(tài)的,但是當(dāng)你把外界溫度一升高,水達(dá)到它的沸點(diǎn)之后,就會(huì)形成水蒸氣;當(dāng)你把外界溫度降下來(lái),水蒸氣就有會(huì)變成液態(tài)的水了。這里是外界條件是溫度,溫度的變化會(huì)引起水的狀態(tài)的變化。這個(gè)例子可以和我們的狀態(tài)機(jī)來(lái)做一個(gè)簡(jiǎn)單的思想對(duì)比。

2、考慮狀態(tài)機(jī)的關(guān)鍵點(diǎn):

從剛才的定義來(lái)看,我們只要抓住狀態(tài)機(jī)的關(guān)鍵點(diǎn)來(lái)理解就行:

1、外部輸入

2、當(dāng)前狀態(tài)

3、下一個(gè)狀態(tài)

二、兩種狀態(tài)機(jī)類(lèi)型:

(1)Moore型狀態(tài)機(jī)特點(diǎn)是:輸出只與當(dāng)前狀態(tài)有關(guān)(與輸入信號(hào)無(wú)關(guān))。相對(duì)簡(jiǎn)單,考慮狀態(tài)機(jī)的下一個(gè)狀態(tài)時(shí)只需要考慮它的當(dāng)前狀態(tài)就行了。

(2)Mealy型狀態(tài)機(jī)的特點(diǎn)是:輸出不只和當(dāng)前狀態(tài)有關(guān),還與輸入信號(hào)有關(guān)。狀態(tài)機(jī)接收到一個(gè)輸入信號(hào)需要跳轉(zhuǎn)到下一個(gè)狀態(tài)時(shí),狀態(tài)機(jī)綜合考慮2個(gè)條件(當(dāng)前狀態(tài)、輸入值)后才決定跳轉(zhuǎn)到哪個(gè)狀態(tài)。

三、狀態(tài)機(jī)的常見(jiàn)用途:

(1)電路設(shè)計(jì)中廣泛使用了狀態(tài)機(jī)思想。

(2)FPGA程序設(shè)計(jì)。

(3)軟件設(shè)計(jì)(框架類(lèi)型的設(shè)計(jì),譬如操作系統(tǒng)的GUI系統(tǒng)、消息機(jī)制)。

四、狀態(tài)機(jī)解決了什么問(wèn)題:

(1)我們平時(shí)寫(xiě)程序都是順序執(zhí)行的,這種程序有個(gè)特點(diǎn):程序的大體執(zhí)行流程是既定的,程序的執(zhí)行是遵照一定的大的方向有跡可尋的。

(2)但是偶爾會(huì)碰到這樣的程序:外部不一定會(huì)按照既定流程來(lái)給程序輸入信息,而程序還需要完全能夠接收并響應(yīng)外部的這些輸入信號(hào),還要能做出符合邏輯的輸出。

五、實(shí)戰(zhàn)例子:

開(kāi)鎖狀態(tài)機(jī)。功能描述:用戶連續(xù)輸入正確的密碼則會(huì)開(kāi)鎖,如果密碼輸入過(guò)程錯(cuò)誤則鎖會(huì)退回到初始狀態(tài)重新計(jì)入密碼,即:用戶只需要連續(xù)輸入出正確的密碼即可開(kāi)鎖(輸入錯(cuò)誤不用撤銷(xiāo)、也不用刪除)。

#include <stdio.h>

// 給狀態(tài)機(jī)定義狀態(tài)集

typedef enum

STATE1,

STATE2,

STATE3,

STATE4,

STATE5,

STATE6,

STATE7,

}STATE;

int main(void)

int num = 0;

// current_state記錄狀態(tài)機(jī)的當(dāng)前狀態(tài),初始為STATE1,用戶每輸入一個(gè)正確的

// 密碼STATE就走一步,一直到STATE為STATE7后鎖就開(kāi)了;其中只要有一次用戶

// 輸入對(duì)不上就回到STATE1.

STATE current_state = STATE1; // 狀態(tài)機(jī)初始狀態(tài)為STATE1

// 第一步:實(shí)現(xiàn)一個(gè)用戶循環(huán)輸入密碼的循環(huán)

printf("請(qǐng)輸入密碼,密碼正確開(kāi)鎖.");

while (1)

scanf("%d", &num);

printf("num = %d.", num);

// 在這里處理用戶的本次輸入

switch (current_state)

case STATE1:

if (num == 1)

current_state = STATE2; // 用戶輸入對(duì)了一步,STATE走一步

else

current_state = STATE1;

break;

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    492

    瀏覽量

    27529
  • fsm
    fsm
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    12821
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Simulink中的狀態(tài)機(jī)建模方法 Simulink數(shù)據(jù)可視化與分析功能

    1. Simulink中的狀態(tài)機(jī)建模方法 1.1 理解狀態(tài)機(jī)的基本概念 在開(kāi)始建模之前,了解狀態(tài)機(jī)的基本概念是必要的。狀態(tài)機(jī)由以下幾個(gè)部分組成:
    的頭像 發(fā)表于 12-12 09:27 ?273次閱讀

    基于狀態(tài)機(jī)和面向?qū)ο蟮乃枷朐O(shè)計(jì)按鍵檢測(cè)模塊

    嵌入式入門(mén)學(xué)習(xí)的教程里面,按鍵原理普遍被認(rèn)為是“很簡(jiǎn)單”的知識(shí)點(diǎn)之一,按鍵輸入檢測(cè)的原理,無(wú)非就是通過(guò)CPU不斷掃描按鍵引腳的電平狀態(tài),或者采用單片
    的頭像 發(fā)表于 11-14 11:44 ?227次閱讀
    基于<b class='flag-5'>狀態(tài)機(jī)</b>和面向?qū)ο蟮乃枷朐O(shè)計(jì)按鍵檢測(cè)模塊

    觸發(fā)器和狀態(tài)機(jī)的關(guān)系是什么

    觸發(fā)器和狀態(tài)機(jī)在數(shù)字電路設(shè)計(jì)中有著緊密的關(guān)系,它們共同構(gòu)成了時(shí)序邏輯電路的基礎(chǔ),用于實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)、處理和傳輸。
    的頭像 發(fā)表于 08-12 11:24 ?424次閱讀

    如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)

    在FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)中實(shí)現(xiàn)狀態(tài)機(jī)是一種常見(jiàn)的做法,用于控制復(fù)雜的數(shù)字系統(tǒng)行為。狀態(tài)機(jī)能夠根據(jù)當(dāng)前的輸入和系統(tǒng)狀態(tài),決定下一步的動(dòng)作和新的狀態(tài)。這里,我們將詳細(xì)探討如何在FPG
    的頭像 發(fā)表于 07-18 15:57 ?566次閱讀

    玩轉(zhuǎn)Spring狀態(tài)機(jī)

    說(shuō)起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式中狀態(tài)模式的區(qū)別是啥呢?沒(méi)錯(cuò),Spring狀態(tài)機(jī)就是狀態(tài)模式的一種實(shí)現(xiàn),在介紹S
    的頭像 發(fā)表于 06-25 14:21 ?931次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)機(jī)</b>

    關(guān)于SMU狀態(tài)機(jī)的問(wèn)題求解

    我有一些關(guān)于 SMU 狀態(tài)機(jī)的問(wèn)題。 假設(shè)由于某種原因,SMU 已進(jìn)入故障狀態(tài)。 手冊(cè)指出,要返回運(yùn)行狀態(tài)并將 FSP 恢復(fù)到無(wú)故障狀態(tài),應(yīng)調(diào)用IfxSmu_releaseFSP()。
    發(fā)表于 05-29 08:18

    請(qǐng)問(wèn)STM32F051用了操作系統(tǒng)RTX后還需要寫(xiě)狀態(tài)機(jī)不?

    現(xiàn)在學(xué)會(huì)了rtx操作系統(tǒng)后,原來(lái)用狀態(tài)機(jī)的學(xué)的程序,可不可以不切割,直接單線程來(lái)執(zhí)行列?各位前前輩指點(diǎn)一下。多謝!
    發(fā)表于 05-08 06:11

    在Verilog中實(shí)現(xiàn)Moore型和Mealy型狀態(tài)機(jī)的方法簡(jiǎn)析

    編寫(xiě)能夠被綜合工具識(shí)別的狀態(tài)機(jī),首先需要理解狀態(tài)機(jī)的基本概念和分類(lèi)。狀態(tài)機(jī)(FSM)是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間轉(zhuǎn)換的邏輯結(jié)構(gòu)。
    的頭像 發(fā)表于 05-01 11:38 ?1564次閱讀

    求助LabVIEW,狀態(tài)機(jī)里面反饋節(jié)點(diǎn)如何初始化問(wèn)題

    求助labview,狀態(tài)機(jī)里面反饋節(jié)點(diǎn)如何初始化,下次執(zhí)行這個(gè)狀態(tài)的時(shí)候初始化一次!謝謝謝謝!
    發(fā)表于 03-25 18:17

    如何采用“狀態(tài)機(jī)”解析UART數(shù)據(jù)幀

    如果一個(gè)系統(tǒng)接收上述“不定長(zhǎng)度”的協(xié)議幀,將會(huì)有一個(gè)挑戰(zhàn)--如何高效接收與解析。 為簡(jiǎn)化系統(tǒng)設(shè)計(jì),我們強(qiáng)烈建議您采用“狀態(tài)機(jī)”來(lái)解析UART數(shù)據(jù)幀。
    的頭像 發(fā)表于 03-25 14:29 ?680次閱讀
    如何采用“<b class='flag-5'>狀態(tài)機(jī)</b>”解析UART數(shù)據(jù)幀

    請(qǐng)問(wèn)GPIF狀態(tài)機(jī)的內(nèi)部信號(hào)需要延遲才能斷言嗎?

    dma_wm_thn 這樣的過(guò)渡觸發(fā)器需要一些周期的延遲才能斷言嗎? 在我的實(shí)踐中,DMA_WM_THN 觸發(fā)器似乎有 1 個(gè)時(shí)鐘周期延遲: ? 圖像是我的狀態(tài)機(jī)的一部分,數(shù)據(jù)總線是 32 位
    發(fā)表于 02-23 07:43

    什么是有限狀態(tài)機(jī)?如何解決傳統(tǒng)有限狀態(tài)機(jī)狀態(tài)爆炸」問(wèn)題?

    有限狀態(tài)機(jī)(Finite State Machine,簡(jiǎn)稱(chēng)FSM)是一種用來(lái)進(jìn)行對(duì)象行為建模的工具,其作用主要是描述對(duì)象在它的生命周期內(nèi)所經(jīng)歷的狀態(tài)序列以及如何響應(yīng)來(lái)自外界的各種事件。
    的頭像 發(fā)表于 02-17 16:09 ?6219次閱讀
    什么是有限<b class='flag-5'>狀態(tài)機(jī)</b>?如何解決傳統(tǒng)有限<b class='flag-5'>狀態(tài)機(jī)</b>「<b class='flag-5'>狀態(tài)</b>爆炸」問(wèn)題?

    Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

    在verilog中狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書(shū)寫(xiě)代碼,同時(shí)作為一種思想方法,在別的代碼設(shè)計(jì)中也會(huì)有所幫助。 一、簡(jiǎn)介 在使用過(guò)程中我們常說(shuō)
    的頭像 發(fā)表于 02-12 19:07 ?4049次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計(jì)實(shí)例

    狀態(tài)機(jī)該怎么監(jiān)控

    狀態(tài)機(jī)卡住的場(chǎng)景——通過(guò)狀態(tài)跳轉(zhuǎn)條件的DFX信號(hào)去判斷卡住的原因
    的頭像 發(fā)表于 01-15 10:03 ?416次閱讀
    <b class='flag-5'>狀態(tài)機(jī)</b>該怎么監(jiān)控

    Spring狀態(tài)機(jī)的實(shí)現(xiàn)原理和使用方法

    說(shuō)起 Spring 狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式中狀態(tài)模式的區(qū)別是啥呢?沒(méi)錯(cuò),Spring 狀態(tài)機(jī)就是狀態(tài)模式的一種實(shí)現(xiàn),在
    的頭像 發(fā)表于 12-26 09:39 ?1977次閱讀
    Spring<b class='flag-5'>狀態(tài)機(jī)</b>的實(shí)現(xiàn)原理和使用方法
    RM新时代网站-首页