在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

狀態機編程都有哪些優點?

奈因PCB電路板設計 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2021-07-27 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文總結下狀態機編程的優點。

提高CPU使用效率

話說我只要見到滿篇都是delay_ms()的程序就會頭疼,動輒十幾個ms幾十個ms的軟件延時是對CPU資源的巨大浪費,寶貴的CPU時間都浪費在了NOP指令上。那種為了等待一個管腳電平跳變或者一個串口數據,讓整個程序都不動的情況也讓我非常糾結,如果事件一直不發生電平跳變,你要等到世界末日么?

如果應用狀態機編程思想,程序只需要用全局變量記錄下工作狀態,就可以轉頭去干別的工作了,當然忙完那些活兒之后要再看看工作狀態有沒有變化。只要目標事件(定時未到、電平沒跳變、串口數據沒收完)還沒發生,工作狀態就不會改變,程序就一直重復著“查詢—干別的—查詢—干別的”這樣的循環,這樣CPU就閑不下來了。

這種處理方法的實質就是在程序等待事件的過程中間隔性地插入一些有意義的工作,好讓CPU不是一直無謂地等待。

邏輯完備性

邏輯完備性是狀態機編程最大的優點。

不知道大家有沒有用C語言寫過計算器的小程序,我很早以前寫過,寫出來一測試,那個慘不忍睹啊!當我規規矩矩的輸入算式的時候,程序可以得到正確的計算結果,但要是故意輸入數字和運算符號的隨意組合,程序總是得出莫名其妙的結果。

后來我試著思維模擬一下程序的工作過程,正確的算式思路清晰,流程順暢,可要碰上了不規矩的式子,走著走著我就暈菜了,那么多的標志位,那么多的變量,變來變去,最后直接分析不下去了。

很久之后我認識了狀態機,才恍然明白,當時的程序是有邏輯漏洞的。如果把這個計算器程序當做是一個反應式系統,那么一個數字或者運算符就可以看做一個事件,一個算式就是一組事件組合。對于一個邏輯完備的反應式系統,不管什么樣的事件組合,系統都能正確處理事件,而且系統自身的工作狀態也一直處在可知可控的狀態中。反過來,如果一個系統的邏輯功能不完備,在某些特定事件組合的驅動下,系統就會進入一個不可知不可控的狀態,與設計者的意圖相悖。

狀態機就能解決邏輯完備性的問題。

狀態機是一種以系統狀態為中心,以事件為變量的設計方法,它專注于各個狀態的特點以及狀態之間相互轉換的關系。狀態的轉換恰恰是事件引起的,那么在研究某個具體狀態的時候,我們自然而然地會考慮任何一個事件對這個狀態有什么樣的影響。這樣,每一個狀態中發生的每一個事件都會在我們的考慮之中,也就不會留下邏輯漏洞。

這樣說也許大家會覺得太空洞,實踐出真知,某天如果你真的要設計一個邏輯復雜的程序,會覺得狀態機真香!

程序結構清晰

用狀態機寫出來的程序的結構是非常清晰的。

程序員最痛苦的事兒莫過于讀別人寫的代碼。如果代碼不是很規范,而且手里還沒有流程圖,讀代碼會讓人暈了又暈,只有順著程序一遍又一遍的看,很多遍之后才能隱約地明白程序大體的工作過程。有流程圖會好一點,但是如果程序比較大,流程圖也不會畫得多詳細,很多細節上的過程還是要從代碼中理解。

相比之下,用狀態機寫的程序要好很多,拿一張標準的UML狀態轉換圖,再配上一些簡明的文字說明,程序中的各個要素一覽無余。程序中有哪些狀態,會發生哪些事件,狀態機如何響應,響應之后跳轉到哪個狀態,這些都十分明朗,甚至許多動作細節都能從狀態轉換圖中找到。可以毫不夸張的說,有了UML狀態轉換圖,程序流程圖寫都不用寫。

來源:STM32嵌入式開發

版權歸原作者所有,如有侵權,請聯系刪除。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3687

    瀏覽量

    95115

原文標題:總結一下狀態機編程的優點

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    NVMe高速傳輸之擺脫XDMA設計之十:NVMe初始化狀態機設計

    1為NVMe配置初始化狀態機狀態轉移圖。各狀態的說明如下: 圖1NVMe初始化狀態轉移圖 IDLE:空閑狀態,復位后的初始
    發表于 07-05 22:03

    NVMe高速傳輸之擺脫XDMA設計之八:PCIe初始化狀態機設計

    PCIe配置初始化狀態機實現PCIe設備枚舉和配置空間初始化過程,在完成鏈路訓練后,使用DFS(深度優先搜索)算法枚舉PCIe總線上的設備,完成PCIe總線域的地址分配和設備的初始化。PCIe配置
    發表于 07-05 22:00

    有可能在 FX3 GPIF2 中創建兩個獨立的狀態機嗎?

    我想,如果我想通過 FX3 GPIF2 創建兩個獨立的傳輸流接口,我需要在 GPIF2 設計器中創建兩個獨立的狀態機,我是否有可能在 GPIF2 設計器中創建兩個獨立的狀態機
    發表于 05-20 06:14

    cypress3014視頻格式改變的話,GPIF狀態機需不需要重新配置?

    你好,請問視頻格式改變的話,GPIF狀態機需不需要重新配置
    發表于 05-14 07:28

    [Actor]在程序框圖編程時,如何操作消息和方法對應的VI

    actor應用的關鍵: 當在程序框圖編程時,核心是針對“消息”vi 進行操作,并不操作消息對應的方法vi(具體要實現的功能)。 調用的消息vi時,后臺自動調用對應方法vi。 相當于在隊列狀態機中,隊列元素的進、出操作 與 該元素對應的
    發表于 05-13 18:10

    求助,關于srammaster.cydsn中狀態機的問題求解

    晚上好。 我目前正在學習 GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn中的狀態機,有狀態START和START1。 這意味著什么?
    發表于 05-12 06:20

    高速ssd存儲系統中數據緩存控制器流程控制設計

    高速SSD系統中流程控制模塊設計。該模塊主要由寄存器、讀狀態機、寫狀態機和命令生成模塊組成,系統介紹各模塊功能。
    的頭像 發表于 04-14 10:43 ?252次閱讀
    高速ssd存儲系統中數據緩存控制器流程控制設計

    樹莓派Pico不帶CAN接口怎么辦?難道要換方案?

    狀態機,以及實現額外的外設(如這里的CAN)。PIO引擎不易編程,也不易學習。但有一些很好的示例可供參考。我正在復習KevinO'Connor精彩的can204
    的頭像 發表于 03-25 09:32 ?473次閱讀
    樹莓派Pico不帶CAN接口怎么辦?難道要換方案?

    Simulink中的狀態機建模方法 Simulink數據可視化與分析功能

    1. Simulink中的狀態機建模方法 1.1 理解狀態機的基本概念 在開始建模之前,了解狀態機的基本概念是必要的。狀態機由以下幾個部分組成:
    的頭像 發表于 12-12 09:27 ?2936次閱讀

    基于狀態機和面向對象的思想設計按鍵檢測模塊

    嵌入式入門學習的教程里面,按鍵原理普遍被認為是“很簡單”的知識點之一,按鍵輸入檢測的原理,無非就是通過CPU不斷掃描按鍵引腳的電平狀態,或者采用單片引腳外部中斷方式,然后在死循環或者中斷服務程序里面處理按鍵被按下
    的頭像 發表于 11-14 11:44 ?941次閱讀
    基于<b class='flag-5'>狀態機</b>和面向對象的思想設計按鍵檢測模塊

    編程晶振的優點和缺點

    編程晶振,近年來漸入人們眼中。什么是可編程晶振,與普通晶振有什么區別?可編程晶振的優點和缺點有哪些?1,什么是可編程晶振可
    的頭像 發表于 09-30 10:44 ?842次閱讀
    可<b class='flag-5'>編程</b>晶振的<b class='flag-5'>優點</b>和缺點

    單片io口的四種工作狀態

    單片的I/O口工作狀態是單片編程和硬件操作中非常重要的一部分,它決定了單片如何與外部設備進行通信。 1. 單片
    的頭像 發表于 09-14 14:24 ?3738次閱讀

    具有可編程FIR和IIR濾波器的Δ-Σ ADC的優點

    電子發燒友網站提供《具有可編程FIR和IIR濾波器的Δ-Σ ADC的優點.pdf》資料免費下載
    發表于 09-03 11:48 ?0次下載
    具有可<b class='flag-5'>編程</b>FIR和IIR濾波器的Δ-Σ ADC的<b class='flag-5'>優點</b>

    觸發器和狀態機的關系是什么

    觸發器和狀態機在數字電路設計中有著緊密的關系,它們共同構成了時序邏輯電路的基礎,用于實現數據的存儲、處理和傳輸。
    的頭像 發表于 08-12 11:24 ?918次閱讀

    如何在FPGA中實現狀態機

    在FPGA(現場可編程門陣列)中實現狀態機是一種常見的做法,用于控制復雜的數字系統行為。狀態機能夠根據當前的輸入和系統狀態,決定下一步的動作和新的
    的頭像 發表于 07-18 15:57 ?1197次閱讀
    主站蜘蛛池模板: 夜色综合 | 一级三级黄色片 | 午夜黄色影片 | 国产在线视频你懂的 | 性做久久久久久久 | 色婷婷婷丁香亚洲综合不卡 | 国产精品丝袜xxxxxxx | 午夜福免费福利在线观看 | 天天躁夜夜躁狠狠躁2024 | 久青草久青草高清在线播放 | 四虎海外在线永久免费看 | 色爽爽爽| 中文字幕第15页 | 亚洲男女免费视频 | caopon在线| 日韩一级欧美一级一级国产 | 免费一级成人毛片 | 51xtv成人影院 | 久久观看午夜精品 | 色色色色网| 午夜精品视频在线观看美女 | 中文字幕 视频一区 | 亚洲狠狠操 | 免费看国产精品久久久久 | 天天干天天插天天射 | 欧美性生活网址 | 伊人精品久久久大香线蕉99 | 国产在线一区视频 | 国产精品www夜色影视 | 欧美性猛交xxxx黑人喷水 | 三级黄色一级视频 | 日本一卡精品视频免费 | 国产亚洲第一伦理第一区 | 成人欧美一区二区三区 | 夜夜艹| 99久久精品费精品国产一区二区 | 56pao强力打造 | 亚洲一区免费看 | 亚洲成a人片在线观看导航 亚洲成a人片在线观看尤物 | 两性色午夜视频免费国产 | 香蕉视频啪啪 |