精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

c語言|簡單的狀態機

玩轉單片機 ? 來源:玩轉單片機 ? 2023-06-14 09:13 ? 次閱讀

不管做什么或者實現什么功能,必定會有實現需求的步驟,簡單理解就是在某個狀態下做某事,這就很符合C語言面向過程的特點,個人認為面向對象其實是面向過程的封裝,封裝的好處自然就是符合人的思維,以及便于后續的修改移植工作。

| 簡單的狀態機

相信讀者們剛入門學習單片機的時候,應該比較常使用標志位來觸發任務運行,這就是簡單的狀態機。

//主函數
intmain()
{
intflag=0;
while(1)
{
if(flag==0)
{
task_A();
}
elseif(flag==1)
{
task_B();
}
elseif(flag==2)
{
task_C();
}
......
}
}

往往判斷語句太多不利于閱讀,那就需要對上面的代碼進行優化:

//主函數
intmain()
{
intflag=0;
while(1)
{
switch(flag)
{
case0x00:
task_A();
break;
case0x01:
task_B();
break;
case0x02:
task_C();
break;
......
default:
break;
}
}
}

|封裝狀態機

在項目中使用狀態機往往需要封裝一下,避免全局變量標志到處飛就不好修改和維護項目,最好的方法就是高內聚低耦合

voidtest(void)
{
staticstate;
if(state==0)
{
if(!task_A())
{
state=1;
}
}
elseif(state==1)
{
if(!task_B())
{
state=2;
}
}
elseif(state==2)
{
if(!task_C())
{
state=0;
}
}
}

intmain()
{
while(1)
{
test();
}
}

|附件

簡單寫個小demo,加深一下對狀態機的理解,這些狀態都是面向有限的狀態而言。

#include"stdio.h"
#include"stdint.h"

typedefstruct
{
uint8_tflag;
}task_struct;

//觸發任務
voidtask_open(task_struct*task)
{
if(!task->flag)
{
task->flag=!task->flag;
}
}

//關閉任務
voidtask_close(task_struct*task)
{
if(task->flag)
{
task->flag=!task->flag;
}
}

//任務初始化
voidtask_init(void)
{
/*初始化*/
//printf("testinit
");
}

//任務處理
voidtask_handle(void)
{
printf("testhandle
");
}

//輪訓任務
voidtask_A(task_struct*task,uint8_ttype)
{
if(!task->flag)
{
task_init();
}
else
{
if(!type)
{
/*單次執行*/
task_handle();
/*關閉任務*/
task_close(task);
}
else
{
/*循環執行*/
task_handle();
}
}
}

intmain()
{
task_structtaskA;
task_open(&taskA);
while(1)
{
task_A(&taskA,0);
}

}




審核編輯:劉清

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

    關注

    6032

    文章

    44514

    瀏覽量

    632951
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136174
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27477
  • 單封裝
    +關注

    關注

    0

    文章

    5

    瀏覽量

    5335

原文標題:C語言|狀態機

文章出處:【微信號:玩轉單片機,微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于C語言狀態機實現方案

    關于狀態機,基礎的知識點可以自行理解。本文主要講解的是一個有限狀態機FSM通用的寫法,目的在于更好理解,移植,節省代碼閱讀與調試時間,體現出編程之美。
    發表于 09-13 09:28 ?766次閱讀
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>狀態機</b>實現方案

    c語言狀態機資料(轉)

    c語言狀態機資料 親 喜歡的拿去用吧
    發表于 08-07 14:32

    有限狀態機的硬件描述語言設計方法

    實驗目的 1、 熟悉用硬件描述語言(VHDL)設計一般狀態機所包含的幾個基本部分;2、 掌握用硬件描述語言(VHDL)設計Moore型和Mealy型有限狀態機的方法;3、 了解
    發表于 09-03 09:48 ?0次下載

    狀態機舉例

    狀態機舉例 你可以指定狀態寄存器和狀態機狀態。以下是一個有四種狀態的普通狀態機。 // Th
    發表于 03-28 15:18 ?974次閱讀

    狀態機原理及用法

    狀態機原理及用法狀態機原理及用法狀態機原理及用法
    發表于 03-15 15:25 ?0次下載

    狀態機概述 如何理解狀態機

    本篇文章包括狀態機的基本概述以及通過簡單的實例理解狀態機
    的頭像 發表于 01-02 18:03 ?1w次閱讀
    <b class='flag-5'>狀態機</b>概述  如何理解<b class='flag-5'>狀態機</b>

    狀態機如何簡化PLC程序的編寫

    在PLC程序的編寫過程中,可以使用狀態機的控制思路,將一些復雜的控制過程使用狀態機的方法處理。這里簡單給大家介紹一下什么是狀態機?如下圖所示,為一個
    的頭像 發表于 09-10 14:44 ?3879次閱讀
    <b class='flag-5'>狀態機</b>如何簡化PLC程序的編寫

    淺談狀態機的要素、分類

    說到單片編程,不得不說到狀態機狀態機做為軟件編程的主要架構已經在各種語言中應用,當然包括C語言
    的頭像 發表于 10-20 17:27 ?4996次閱讀

    FPGA:狀態機簡述

    本文目錄 前言 狀態機簡介 狀態機分類 Mealy 型狀態機 Moore 型狀態機 狀態機描述 一段式
    的頭像 發表于 11-05 17:58 ?7300次閱讀
    FPGA:<b class='flag-5'>狀態機</b>簡述

    簡單狀態機入門知識詳解

    今天的文章只是帶大家入門和了解一下狀態機,等你真正在工作當中有遇到這個狀態機作為開發需要的話,你再去深入研究。
    的頭像 發表于 12-24 18:06 ?1850次閱讀

    單片C語言 -- 基于條件選擇的狀態機編程技巧

    單片C語言 -- 基于條件選擇的狀態機編程技巧
    發表于 11-23 17:51 ?16次下載
    單片<b class='flag-5'>機</b><b class='flag-5'>C</b><b class='flag-5'>語言</b> -- 基于條件選擇的<b class='flag-5'>狀態機</b>編程技巧

    狀態模式(狀態機)

    以前寫狀態機,比較常用的方式是用 if-else 或 switch-case,高級的一點是函數指針列表。最近,看了一文章《c語言設計模式–狀態模式(
    發表于 12-16 16:53 ?9次下載
    <b class='flag-5'>狀態</b>模式(<b class='flag-5'>狀態機</b>)

    C語言狀態機編程思想

    關注、星標公眾號,直達精彩內容文章來源:頭條-嵌入式在左C語言在右鏈接:https://www.toutiao.com/i6843028812112855564/有限狀態機概念有限狀態機
    發表于 01-13 13:32 ?15次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言狀態機</b>編程思想

    單片狀態機淺談

    說到單片編程,不得不說到狀態機狀態機做為軟件編程的主要架構已經在各種語言中應用,當然包括C語言
    發表于 02-10 10:44 ?12次下載
    單片<b class='flag-5'>機</b>之<b class='flag-5'>狀態機</b>淺談

    什么是狀態機狀態機的種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化的模型。在芯片設計中,
    的頭像 發表于 10-19 10:27 ?8999次閱讀