91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

介紹一種高效率的c語言狀態(tài)機(jī)

冬至配餃子 ? 來源:最后一個(gè)bug ? 作者:bug菌 ? 2022-08-12 09:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

/***高效率狀態(tài)機(jī)***/

狀態(tài)機(jī)對(duì)于有一定編程經(jīng)驗(yàn)的程序員一定會(huì)用到,因?yàn)閷?duì)于我們的各種各樣的模塊他們都會(huì)有各種狀態(tài),其他模塊都會(huì)根據(jù)這些狀態(tài)和數(shù)據(jù)進(jìn)行處理;同時(shí)在網(wǎng)絡(luò)編程方面也會(huì)根據(jù)網(wǎng)絡(luò)狀態(tài)和消息類型進(jìn)行相應(yīng)處理等等方面狀態(tài)機(jī)的使用是非常廣泛的,我們通常稱這種狀態(tài)機(jī)為有限狀態(tài)機(jī)—FSM。

在進(jìn)行有限狀態(tài)機(jī)編寫之前,我們需要進(jìn)行狀態(tài)的梳理,
最好是能畫UML圖或者是簡(jiǎn)單的畫一些狀態(tài)圖,那么我們平時(shí)都是如何實(shí)現(xiàn)這個(gè)狀態(tài)機(jī)框架的呢?

1)用判斷語句進(jìn)行狀態(tài)機(jī)的分支


if(statue == STATUE_1)sStatue1Process();

else if(statue == STATUE_2)sStatue2Process();

else if(statue == STATUE_3)sStatue3Process();

elsesStatue4Process();


上面通過if/else分支了4種狀態(tài),分別每種狀態(tài)有各自的處理辦法process函數(shù),那么狀態(tài)之間如何轉(zhuǎn)換呢?在我們的狀態(tài)處理函數(shù)里面,會(huì)
通過處理當(dāng)前狀態(tài)的相關(guān)事務(wù),然后通過相關(guān)條件改變statue,如statue=STATUE_2,從而下一次進(jìn)入對(duì)應(yīng)的狀態(tài)中!

那么上面我們是通過分支來進(jìn)行處理,同樣我們也可以使用switch來進(jìn)行處理!
至于選擇if/else還是switch,我們之前有個(gè)文章進(jìn)行分析,大家可以前往閱讀,這兩種分支語句對(duì)于不太多的狀態(tài)仍然是首選的,而對(duì)于我們的狀態(tài)較多,那么可能通過判斷會(huì)浪費(fèi)一些時(shí)間,為了提高效率,我們提出了第二種方法。

2)用函數(shù)指針高效提高狀態(tài)機(jī)效率

參考代碼如下:

pYYBAGL1p5GABeHLAAFYvFCT2hU881.png

poYBAGL1p5iANUklAAEKVJLXQxg843.png

pYYBAGL1p56AbI1MAACoAODWsEc134.png

按照預(yù)期輸出了最終的結(jié)果,該辦法類似于用空間換了時(shí)間,把狀態(tài)和處理進(jìn)行了直接綁定,這樣會(huì)使用掉一些內(nèi)存,不過對(duì)于整個(gè)軟件代碼而言是不值一提的!

優(yōu)化:我們可能對(duì)于狀態(tài)處理還需要傳入一些數(shù)據(jù),我們可以優(yōu)化函數(shù)指針讓其變成含參數(shù)的形式!等等優(yōu)化版本大同小異?。ü厦娴拇a手機(jī)打得,風(fēng)格寫得不好大家請(qǐng)見諒)


審核編輯:劉清


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

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145643
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    499

    瀏覽量

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

    關(guān)注

    0

    文章

    36

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    資產(chǎn)管理怎么提高效率

    資產(chǎn)管理怎么提高效率資產(chǎn)管理效率提升需從流程自動(dòng)化、數(shù)據(jù)可視化、資源優(yōu)化三方面入手,通過智能工具替代人工操作。廣州杰眾智能科技有限公司的RFID技術(shù)方案,可使資產(chǎn)盤點(diǎn)效率提升90%,閑置資產(chǎn)利用率
    的頭像 發(fā)表于 01-28 16:49 ?466次閱讀
    資產(chǎn)管理怎么提<b class='flag-5'>高效率</b>

    這幾個(gè)單片機(jī)技巧如果不了解,真的很難再進(jìn)階

    的嵌入式系統(tǒng)C編譯器代碼長(zhǎng)度和執(zhí)行時(shí)間僅比以匯編語言編寫的同樣功能程度長(zhǎng) 5-20%。雖然C語言是最普遍的一種高級(jí)
    發(fā)表于 01-05 07:22

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU狀態(tài)機(jī)與EVENT事件

    上篇我們介紹了ISDU的典型編碼格式和應(yīng)用案例,本篇我們就來詳細(xì)介紹下,ISDU的狀態(tài)機(jī),并把EVENT事件的邏輯,給大家好好解析下。 1主站ISDU狀態(tài)機(jī) 如上圖所示,ISDU的
    的頭像 發(fā)表于 11-29 18:28 ?4743次閱讀
    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU<b class='flag-5'>狀態(tài)機(jī)</b>與EVENT事件

    為什么單片機(jī)還在用C語言編程?

    最適合單片機(jī)開發(fā)的編程語言實(shí)在太過晦澀難懂,學(xué)習(xí)起來非常的不方便,并且每一種單片機(jī)的匯編指令有很大區(qū)別,所以想把個(gè)程序從這種單片
    發(fā)表于 11-28 07:37

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

    時(shí)刻所存在的穩(wěn)定的工作情況,系統(tǒng)在整個(gè)工作周期中可能有多個(gè)狀態(tài)。例如部電動(dòng)機(jī)共有正轉(zhuǎn)、反轉(zhuǎn)、停轉(zhuǎn)這 3 狀態(tài)
    發(fā)表于 11-27 08:15

    嵌入式開發(fā)為何經(jīng)常用到狀態(tài)機(jī)架構(gòu)

    相悖。 狀態(tài)機(jī)就能解決邏輯完備性的問題。 狀態(tài)機(jī)一種以系統(tǒng)狀態(tài)為中心,以事件為變量的設(shè)計(jì)方法,它專注于各個(gè)狀態(tài)的特點(diǎn)以及
    發(fā)表于 11-25 07:08

    C語言和單片機(jī)C語言有什么差異

    的目標(biāo)代碼短、運(yùn)行速度高、存儲(chǔ)空間小、符合C語言的ANSI標(biāo)準(zhǔn),生成的代碼遵循Intel目標(biāo)文件格式,而且可與A51匯編語言PL/M51語言目標(biāo)代碼混合使用。 4、
    發(fā)表于 11-14 07:55

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(六):主從站狀態(tài)機(jī)解析

    前言 書接上文,今天我們就來好好聊聊主從站的DL-Mode狀態(tài)機(jī),還請(qǐng)各位童鞋前排坐好! 1主站狀態(tài)機(jī)解析 主站的DL-Mode狀態(tài)機(jī)有5個(gè)大狀態(tài),也是我們很熟悉的 建立通信、開始、預(yù)
    的頭像 發(fā)表于 10-28 17:34 ?6217次閱讀
    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(六):主從站<b class='flag-5'>狀態(tài)機(jī)</b>解析

    在多相降壓轉(zhuǎn)換器中使用耦合電感器可提高效率

    在不影響性能或增加物理空間的情況下提高效率。 一種很有前景的方法是使用耦合電感器 (CL)。通過使用相間互感技術(shù),CL 可出色的消除電流紋波,從而在保持兼容傳統(tǒng)布局的同時(shí)顯著提高效率。 本文將簡(jiǎn)要概述多相降壓轉(zhuǎn)換器設(shè)計(jì)人員在
    的頭像 發(fā)表于 10-02 16:57 ?1943次閱讀
    在多相降壓轉(zhuǎn)換器中使用耦合電感器可提<b class='flag-5'>高效率</b>

    HER304高效率整流二極管規(guī)格書

    HER304高效率整流二極規(guī)格書
    發(fā)表于 09-19 17:32 ?0次下載

    AP8105:采用先進(jìn)PFM控制架構(gòu)的高效率、低紋波DC-DC升壓轉(zhuǎn)換器

    致 AP8105通過創(chuàng)新的PFM控制架構(gòu)和精密的模擬設(shè)計(jì),為低輸入電壓應(yīng)用提供了高效率、低噪聲的功率解決方案。其卓越的電氣特性、靈活的設(shè)計(jì)選項(xiàng)和極簡(jiǎn)的外部元件需求,使其成為電池供電設(shè)備的理想選擇。無論是消費(fèi)電子產(chǎn)品還是工業(yè)應(yīng)用,AP8105都能提供可靠、
    發(fā)表于 08-22 10:17

    高效率、6通道、白光LED驅(qū)動(dòng)器,帶I2C接口 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()高效率、6通道、白光LED驅(qū)動(dòng)器,帶I2C接口相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有高效率、6通道、白光LED驅(qū)動(dòng)器,帶I2C接口的引腳圖、接線圖、封裝手冊(cè)、中文資料、英
    發(fā)表于 07-30 18:31
    <b class='flag-5'>高效率</b>、6通道、白光LED驅(qū)動(dòng)器,帶I2<b class='flag-5'>C</b>接口 skyworksinc

    高電流、高效率電荷泵,具有自動(dòng)定時(shí)器 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()高電流、高效率電荷泵,具有自動(dòng)定時(shí)器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有高電流、高效率電荷泵,具有自動(dòng)定時(shí)器的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,高電流、高效率電荷泵,具有自動(dòng)定時(shí)器真值表,高電流、
    發(fā)表于 07-29 18:32
    高電流、<b class='flag-5'>高效率</b>電荷泵,具有自動(dòng)定時(shí)器 skyworksinc

    求助,關(guān)于srammaster.cydsn中狀態(tài)機(jī)的問題求解

    晚上好。 我目前正在學(xué)習(xí) GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn中的狀態(tài)機(jī),有狀態(tài)START和START1。 這意味著什么?
    發(fā)表于 05-12 06:20

    MDD高效率整流管的工作原理:如何降低導(dǎo)通損耗?

    在高頻、高功率應(yīng)用中,高效率整流管的導(dǎo)通損耗直接影響電路的整體能效和熱管理。MDD作為專業(yè)的二極管制造商,其高效率整流管因低正向壓降(VF)和快速恢復(fù)特性廣泛應(yīng)用于開關(guān)電源(SMPS)、PFC電路
    的頭像 發(fā)表于 04-03 10:55 ?951次閱讀
    MDD<b class='flag-5'>高效率</b>整流管的工作原理:如何降低導(dǎo)通損耗?