不管做什么或者实现什么功能,必定会有实现需求的步骤,简单理解就是在某个状态下做某事,这就很符合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次阅读
有限状态机的硬件描述语言设计方法
实验目的
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),是一种描述系统状态变化的模型。在芯片设计中,
评论