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

    文章

    44513

    浏览量

    632893
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136158
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27472
  • 单封装
    +关注

    关注

    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 7298次阅读
    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 8991次阅读