不管做什么或者实现什么功能,必定会有实现需求的步骤,简单理解就是在某个状态下做某事,这就很符合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);
}
}
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6074文章
45334浏览量
663302 -
C语言
+关注
关注
183文章
7642浏览量
144556 -
状态机
+关注
关注
2文章
497浏览量
28840 -
单封装
+关注
关注
0文章
5浏览量
5465
原文标题:C语言|状态机
文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
基于C语言的状态机实现方案
关于状态机,基础的知识点可以自行理解。本文主要讲解的是一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。
发表于 09-13 09:28
•1532次阅读
有限状态机的硬件描述语言设计方法
实验目的
1、 熟悉用硬件描述语言(VHDL)设计一般状态机所包含的几个基本部分;2、 掌握用硬件描述语言(VHDL)设计Moore型和Mealy型有限状态机的方法;3、 了解
发表于 09-03 09:48
•0次下载
状态模式(状态机)
以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章《c语言设计模式–状态模式(
发表于 12-16 16:53
•9次下载
C语言状态机编程思想
关注、星标公众号,直达精彩内容文章来源:头条-嵌入式在左C语言在右链接:https://www.toutiao.com/i6843028812112855564/有限状态机概念有限状态机
发表于 01-13 13:32
•15次下载
什么是状态机?状态机的种类与实现
状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,

c语言|简单的状态机
评论