当前位置: 首页 > 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.hkea.cn/news/14373907/

相关文章:

  • 广东网站设计哪家好百色网站建设
  • 投诉举报网站 建设方案如何建立公司网站域名
  • 青岛如何建立企业网站企业wordpress维护
  • 网站 推广商系统 设计淄博企业做网站
  • 网站开发 教程wordpress怎么破解
  • 购买空间网站哪个好wordpress 标题图片
  • 海南住房和城乡建设厅网站c 网站购物车怎么做
  • 南昌seo站内优化网站的建设可以起到什么作用是什么意思
  • 易语言的网站开发系统企业网站建设方案价位
  • 宁波电商网站建设开发广州制作外贸网站
  • 美食网站设计的基本思路卖灯杆的做网站好
  • 电子商务网站创建过程湖南做网站 要上磐石网络
  • 网站建设华网天下制作作个人网页设计链接
  • 常用的建站工具有哪些商城网站设计目标
  • 企业建站系统插件介绍杭州做网站哪家好
  • 保山公司网站建设上海三凯建设管理咨询有限公司网站
  • 广西住房城乡和建设厅网站发外链软件
  • 网站建设的项目总结西安大网站建设公司排名
  • 晋江网站网站建设广州市软件开发有限公司
  • 丹阳网站建设方案手机自己制作表白网站
  • 仅仅建设银行网站打不开旅游类网站建设
  • 新吴网站建设做网站图片素材在线编辑
  • 光山县住房和城乡建设局网站汕头建站培训
  • 网站建设与组织管理网站开发与维护工资
  • html网站实例wordpress 仿站 教程
  • 网站建设意见征求汇报wordpress与微信教程
  • 中国保险行业协会网站国内室内设计网站大全
  • 专门做lolh的网站网站建设论文读书笔记
  • 拥有域名后怎么建设网站网站手机端排名怎么做
  • 网站设计计划书模板山东住房城乡建设厅网站