首页 > 编程语言 >状态机编程

状态机编程

时间:2023-07-25 09:33:05浏览次数:32  
标签:STATUS break return int void 编程 状态机 step

伪代码实例:洗衣机   功能需求 由功能转变状态图 梳理状态之间的转换的关系 梳理状态之间的转换的关系(添加切换条件) 代码编程 #include "stdio.h" #include "string.h" #include "stdlib.h"   #define SELF_CHECK_STATUS (1)//上电自检 #define IDEL_STATUS (2)//空闲 #define COUNT_DOWN_STATUS (3)//倒计时 #define WATER_IN_STATUS (4)//加水 #define DO_WASH_STATUS (5)//洗衣 #define WATER_OUT_STATUS (6)//放水 #define DO_DRY_STATUS (7)//甩干 #define FINISHED_STATUS (8)//洗衣结束 #define ARARM_STATUS (18)//报警 #define PAUSE_STATUS (28)//暂停   int init(void) { return 0; } void global_check(void) { return ; } int auto_check(void) { return 0; } int alarm(void) { return 0; } int wait_for_user(void) { return 0; } int start_countdown(void) { return 0; } int let_water_in(void) { return 0; } int do_wash(void) { return 0; } int let_water_out(void) { return 0; } int do_dry(void) { return 0; } int finished(void) { return 0; }   int main(void) { static int step  = SELF_CHECK_STATUS;//状态切换标志   init();//开机进行一系列初始化(主要是驱动外设)   while(1) { //一些全局的事件检测,用于设置全局标志 global_check();   // 状态机 switch (step) { case SELF_CHECK_STATUS://自检 { auto_check(); if (按下停止) step = FINISHED_STATUS; if (自检pass) step = IDEL_STATUS; else step = ARARM_STATUS; }break; case IDEL_STATUS://空闲 { wait_for_user(); if (按下停止) step = FINISHED_STATUS; if (按下开始) step = COUNT_DOWN_STATUS; }break; case COUNT_DOWN_STATUS://倒计时 { start_countdown(); if (按下停止) step = FINISHED_STATUS; if (倒计时结束) step = WATER_IN_STATUS; }break; case WATER_IN_STATUS://加水 { let_water_in(); if (按下停止) step = FINISHED_STATUS; if (水加满了) step = DO_WASH_STATUS; }break; case DO_WASH_STATUS://洗衣 { do_wash(); if (按下停止) step = FINISHED_STATUS; if (清洗时间结束) step = WATER_OUT_STATUS; }break; case WATER_OUT_STATUS://放水 { let_water_out(); if (按下停止) step = FINISHED_STATUS; if (水放完 && 只洗了一遍) step = WATER_IN_STATUS; else if (水放完 && 洗了两遍) step = 甩干; }break; case DO_DRY_STATUS://甩干 { do_dry(); if (按下停止) step = FINISHED_STATUS; if (甩干时间结束) step = FINISHED_STATUS; }break; case FINISHED_STATUS://洗衣结束 { finished(); if (按下停止) step = FINISHED_STATUS; step = IDEL_STATUS; }break; case ARARM_STATUS://报警 { while(1) { alarm();//死循环,不再响应用户操作,并报警 } }break; case PAUSE_STATUS://暂停 { //功能待完成。。。。。。。 //在任何状态按下暂停键会跳转到暂停态, //再按一次暂停按键会回到之前的状态 }break; default: { }break; } } }  

标签:STATUS,break,return,int,void,编程,状态机,step
From: https://www.cnblogs.com/kn-zheng/p/17578882.html

相关文章

  • java.util.concurrent 编程范例
    java.util.concurrent范例之一java.util.concurrent之一Java代码packagetest;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassTestThreadPool{ publicstaticvoidmain(Stringargs[])thr......
  • 【网络编程】基础知识(Web Server和HTTP协议)
    WebServer一个WebServer就是一个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机)。其主要功能是通过HTTP协议与客户端(通常是浏览器(Browser))进行通信,来接收,存储,处理来自客户端的HTTP请求,并对其请求做出HTTP响应,返回给客户端其请求的内容(文件、网页等)或返回一个Error......
  • GlassFish 3.1.1 的JMS 独立客户端编程
    下面文章很长,至于我的最终解决方法是在独立客户端的项目上右键->库->添加JAR/Folder加入C:\ProgramFiles\glassfish-3.1.2\glassfish\lib\gf-client.jar文件最近一直在关注JMS,起因是从Magento的PHP系统向JMS发送消息。实验了ActiveMQ,GlassFish与ActiveMQ的集成。最后还是......
  • 编程常用的变量命名英文缩写
    Aaddr=addressapp=applicationarg=argumentasm=assembleasyn=asynchronizationauth=authorization/authenticationavg=averageBbuf=bufferCcalc=calculatecert=certificatecmd=commandcmp=comparecol=columncoord=coordinates......
  • java并发编程(二)---上下文切换
    一、什么是上下文切换?  即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,线程会在分配的时间片内执行任务,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几......
  • iOS8开发-Swift编程
    课时列表章节1:第一个Swift应用课时1:编程初体验章节2:第二个Swift应用课时2:加法计算器章节3:第三个Swift应用课时3:四则运算计算器章节4:第四个Swift应用课时4:......
  • 需求前十的编程语言——唯独钟爱Python
    在过去的17个月(2022年1月至2023年5月)时间里,DevJobsScanner通过分析超1400万个开发人员职位,并从中筛选了有明确编程语言需求的职位,得出了在2023年需求量最大的8种语言。目前市场中需求最高的前八位语言分别是:1、JavaScript/TypeScript和以往一样,Javascript仍然......
  • 编程四大件
    计算机组成原理:哈工大,刘宏伟操作系统:南京大学,蒋炎岩,《深入理解计算机体系》,《现代操作系统》数据库:初学者《MySQL必知必会》,深入《MySQL技术内幕--Innodb存储引擎》,中国人民大学的数据库系统概论课程////哈工大,战德臣计算机网络:计算机网络微课堂,《计算机网络:自顶向下方法》数......
  • java并发编程(一)----初识
    一、什么是并发  先看“科普中国”给出的官方解释。并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。   通俗来讲,并发就是指同一时间间隔内发生两个或多......
  • Linux 之 shell 编程
    Linux之shell编程学习笔记(并不完全正确,有误请指正)概念性知识点脚本概念脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的可执行文件运行脚本要求脚本须有可执行权限,即x权限内容格式:以#!/bin/bash开头脚本的执行方式法一(需可执行权限)赋予脚本可执......