当前位置: 首页 > news >正文

网站问题图片后端和前端哪个是青春饭

网站问题图片,后端和前端哪个是青春饭,做网站赠送,厦门网红酒店关于状态机#xff0c;基础的知识点可以自行理解#xff0c;讲解的很多#xff0c;这里主要是想写一个有限状态机FSM通用的写法#xff0c;目的在于更好理解#xff0c;移植#xff0c;节省代码阅读与调试时间#xff0c;体现出编程之美。 传统的实现方案 if...else : …关于状态机基础的知识点可以自行理解讲解的很多这里主要是想写一个有限状态机FSM通用的写法目的在于更好理解移植节省代码阅读与调试时间体现出编程之美。 传统的实现方案 if...else : 搞一大堆if else, 一个函数写很长很长...... swich...case : 也搞一大堆一个函数写很长很长...... 先来看看最近做的一个项目无线通信协议实现的状态机是什么样子的 有三种类型的事件上层下达的命令事件下层到达的标志和数据传输事件超时定时器超时事件。有10种状态关联性很大复杂了吧这要是各种if/else的要写到什么时候呢。 在事件中判断状态在状态中判断事件横竖两种写法的代码都比较冗长看起来呢也不大好一旦增减就又要动脑子重新梳理一遍很累的。 怎么去写呢其状态机原理在根据当前状态(cur_state) 下发生事件(event)后转移到下一个状态号(nxt_state)决定执行的动作(action)。 这里我们首先定义一个结构体如下 typedef struct {State curState;//当前状态EventID eventId;//事件IDState nextState;//下个状态Action action;//具体表现 }StateTransform; 我们假设有3种状态这里可以随意增加状态枚举如下 typedef enum {state_11,state_2,state_3 }State; 我们假设有5个事件也可以随意增加事件ID枚举如下 typedef enum{event_11,event_2,event_3,event_4,event_5 }EventID; 将其封装起来在StateMachine中 typedef struct{State state;int transNum;StateTransform* transform; }StateMachine; 具体流程当前状态-有事件触发-跳到下个状态-具体表现重构代码 StateTransform* findTranss(StateMachine* pSM, const EventID evt) {int i;for (i 0; i pSM-transNum; i) {if ((pSM-transform[i].curState pSM-state) (pSM-transform[i].eventId evt)) {return pSM-transform[i];}}return NULL; } 状态机实现如下 void runStateMachine(StateMachine* pSM, EventID evt) {StateTransform* pTrans;pTrans findTranss(pSM, evt);if (pTrans NULL){xil_printf( CurState %s Do not process enent: %s\r\n, pSM-state,evt);return;}pSM-state pTrans-nextState;Action act pTrans-action;if (act NULL) {xil_printf( change state to %s. No action\r\n,pSM-state);return;}act(evt); } 最后我模拟一些随机事件我们只需要弄清楚事件ID状态切换具体表现就可以了在代码中就是填写stateTran[] 这个表一旦有增减事件状态等等也不需要再去使用switch/case特费脑其代码如下 int run() {StateMachine stateMachine;stateMachine.state state_1;stateMachine.transNum 7;StateTransform stateTran[] {{state_1,event_3,state_2,f121},{state_1,event_4,state_2,NULL},{state_2,event_1,state_3,f231},{state_2,event_4,state_2,f221},{state_3,event_2,state_1,f311},{state_3,event_3,state_2,f321},{state_3,event_5,state_3,f331}};stateMachine.transform stateTran;EventID inputEvent[15] { event_1, event_2, event_3, event_4, event_5,event_1, event_2, event_3, event_4, event_5,event_1, event_2, event_3, event_4, event_5 };int i;for (i 0; i 15; i) {runStateMachine(stateMachine, inputEvent[i]);}return 0; } 最后运行结果如下 总结 状态机应用很广泛也可以锻炼我们写代码的逻辑思维看清问题的本质写的代码才能赏心悦目希望大家能够多多指点找到编程的乐趣欣赏到编程之美。
http://www.yutouwan.com/news/23031/

相关文章:

  • idea网站开发个性wordpress主题
  • 济南网站优化分析用python做网站怎么赚钱
  • 宝塔批量建站工具编程课网课哪个好
  • 网站建设营销排名方案怎么做像滴滴一样网站
  • 网站开发多少费用英文外贸网站设计
  • 企业宣传网站建设前端静态网站模板
  • 网站转为移动网站微信公众号网站开发注意
  • 给医院做网站赚钱吗wordpress加速优化插件
  • 北京市保障房建设投资中心网站瘫痪企业网站建设套餐网络服务
  • 怎么做购物型网站程序员接外包网站
  • 深圳门户网站制作分销系统网站
  • 正版win10做win7系统下载网站旅游网站建设资金请示
  • 企业网站建设课程体会资源丰富免费的网站推荐排名
  • 塑料公司网站建设方案山东省安全双体系建设网站地址
  • 下载的asp网站怎么打开邯郸手机建站价格
  • 连云港市建设银行网站学校联系我们网站制作
  • 提高网站访问量昆明做大的网站开发公司
  • 东莞品牌型网站建设价格网站后台上传用户界面不显示
  • 美工做的好的网站那些网站建设的好
  • seo网站优化系统网站怎么推广软文
  • 网站分享代码怎么加网站广告赚钱吗
  • 唐山制作网站的中国建设银行官方网站 认证
  • 如何做app网站asp.net制作网站开发
  • 智慧团建登录网站入口网站域名不想实名认证
  • 深圳住房建设网站营销软文范例大全300
  • 对网站建设建议临夏州建设厅官方网站
  • 网站开发经理招聘应用网站制作
  • 做网站域名需哪些百度做网站推广
  • 自建网站备案天津关键词优化效果
  • 太原建站塔山双喜网站建设如何找本地客户