某项目中在业务逻辑的处理过程中需要处理多种的中断信号,导致逻辑部分的代码被搞得支离破碎。一直在想有没有好点的,漂亮一点的方法。这次在一个后续的项目中真好有一个重写这部分代码的机会,就拿它开开刀,拉出来练练。
1.分离逻辑处理和中断处理
在原来的实现中因为没有区分处理的原有逻辑和中断逻辑,才导致到处都是大段大段的if/else的。所以上来就将处理逻辑和中断逻辑砍开:
・处理逻辑:在理想状态下的处理逻辑,针对指定信息源作解析处理。
・中断逻辑:针对特殊事件,每个部件所需要采取的处理。
2.抽出处理逻辑中状态
分离出中断逻辑就简单了,很容易的就发现原有的系统中复杂的原因所在,需要在逻辑处理的不同状态下,处理各种中断。
分析各种逻辑,最后得出三种状态机模型:
・一状态状态机:它只有一个状态,只有一个状态那不是什么判断都没有。它其实是只响应中断的处理。
・两状态状态机:它有两个状态,可以描述基于一个阈值的判断。也可以说成“只要那个啥,啥啥了,就啥啥啥。”。
・三状态状态机:它有三个状态,可以描述基于两个阈值的判断。也可以说成“只要那个啥1,啥啥1了,再那个啥2,也啥啥2了,就啥啥啥。”。
啥多了不行,还得整点图。
2.1 一状态的状态机
确实啥也不干,就指望着中断来点啥了。
2.2 两状态状态机
这个好点,判断一个阈值就行了。
2.3 三状态状态机
两个阈值的判断。
也不咋地啊,最多也就2个条件,3个状态,4个中断,其实也就12种状态,但是硬是差点没搞明白。
3.实现
模型出来了,抽一下共同就变成下面这个样了
两个接口:
・Interruptable:封装各种中断的入口
・Logic:封装逻辑的接口,包含中断接口
状态机的实现:
・State:描述各个状态,并提供此状态下的中断接口
・StateMachine:封装状态迁移的逻辑,开放各种状态迁移时的接口。所有中断直接扔给当前状态。
下面是各个模型的共同化
・一状态状态机就一个实现没共同化
・LogicWitch2State:封装了2个状态,并提供各个业务的接口。
・LogicWitch3State:封装了3个状态,并提供各个业务的接口。
再下面就是各个具体的实现了
4.总结
搞完了就想,图个啥啦?本来直接实现就行了,这么一整就活活多出来2个接口和4各类。整地呼哧呼哧的,图啥啦?
想来想去也就图个容易理解。虽然咱IT这行主要是为了让计算机帮咱们干点活,只要计算机明白了其实也就行了。但是在现实中,客户都是善变的,往往一个东西总是要翻来覆去的修改,还经常换着人去改。如果人不容易理解,就计算机明白的话,那后来的人也还要再痛苦一遍。而搞个好点的模式就方便了,容易懂,容易讲,忘了再看一下就明白了。
分享到:
相关推荐
本书由浅入深,循序渐进,适合刚接触基于状态机的嵌入式系统开发的初学者学习,也可作为大中专院校嵌入式相关专业本科生、研究生的教材,同时还可以作为从事嵌入式系统应用开发工程师的参考书。
在使用iTRON类OS的嵌入式系统中,除了驱动程序以外,大多数模块也就是中间件和应用程序是以任务(TASK)的形式设计的。而iTRON类OS大多采用C语言实现,于是用状态机的方式实现功能模块成为了主要的设计方法。 至于说...
本书由浅入深,循序渐进,适合刚接触基于状态机的嵌入式系统开发的初学者学习,也可作为大中专院校嵌入式相关专业本科生、研究生的教材,同时还可以作为从事嵌入式系统应用开发工程师的参考书。
嵌入式系统与桌面GUI系统的不同之处在于: 系统的电源被加载,OS完成初始化动作之后,往往会启动一个电源管理模块,而这个模块则会调用所有应用模块的初始化部分。...这就是嵌入式系统中普遍的状态机模式。
在使用iTRON类OS的嵌入式系统中,除了驱动程序以外,大多数模块也就是中间件和应用程序是以任务(TASK)的形式设计的。本文主要介绍了一下嵌入式系统中的状态机设计心得体会。
嵌入式系统设计 一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式...
本书以ATMEL公司新一代AVR系列单片机中的ATmegal6为蓝本,由浅人深,软硬结合,全面系统地介绍了以AVR为核心构成的单片机嵌入式系统的原理与结构,开发环境与工具,各种接口与功能单元应用的硬件设计思想和软件编写...
文章论述了有限状态机理论,结合软件分层的结构思想,详细分析了事件驱动的程序设计方法。结合实际项目油田原油油量计量 和防盗系统,分析了该系统远程监测终端软件...件驱动的程序设计方法在嵌入式系统中的具体应用。
有限状态机在嵌入式系统中的实现及应用.pdf 有限状态机在嵌入式软件中的应用.pdf 有限状态机在数控系统软件中的应用研究.pdf 有限状态机应用文档资料FPGA设计项目应用学习文档资料(18个).zip 有限状态机的一种实现...
嵌入式系统的面向应用特性,使得大多数程序员沉陷于不同的应用中。在进入新的一轮开发后,往往只有一些简单的经验可供参考。为了加快应用的开发进度,有必要研究一种统一的应用软件结构,使开发人员能够通过简单模式...
有关状态机设计方面的书籍,我这里隆重推荐一本:《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》,中文名叫做《嵌入式系统的微模块化程序设计-实用状态图C/C++实现》,北航出版的,...
本文描述了利用状态机来提高嵌入式前后台系统任务处理能力的实现方法。 1 移动2G光纤直放站近端机监控单元 对于移动2G光纤直放站近端机监控单元,只介绍与本文有关部分的原理框图,如图1所示。图中GSM Modem...
Practical Statecharts in C C++ Quantum Programming for Embedded Systems,
如何使用嵌入式软件代码更加可靠,增强程序的可维护性,一直以来都是嵌入式程序员追求的目标
可应用在云后台微服务和嵌入式软件等各种平台中。EFSM的设计原则是:简单!EFSM的使用者只需要关心:当事件到来时,通过EFSM取得对应事件的处理方法;当特定事件到来,或者条件满足时,调用状态切换方法进行状态切换...
随着 科 学 技术的不断发展,嵌入式系统在工业控制和智能家电领域 得到了广泛的应用,同时控制逻辑和功能也变得越来越复杂,相对于早 期嵌入式系统所采用的简单的控制逻辑程序,现代嵌入式系统越来越倾 向于使用完整...
本文运用一种新方法,实现了基于休眠的嵌入式操作系统启动后,可自动运行任何形式的目标脚本和应用程序。
EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机。使用EFSM可实现上百个状态、上千种事件处理,且可实现多重状态机和层次...可应用在云后台微服务和嵌入式软件等各种平台中。
第1章 单片嵌入式系统概述.doc 第2章 AVR单片机的基本结构.doc 第3章 AVR的指令与汇编系统.doc 第4章 AVR单片机系统设计与开发工具.doc 第11章 实战练习一 第6章 通用IO接口基本结构与输出应用.doc 第7章 中断与中断...