一种基于分层设计的小家电控制板通用程序框架
本文设计了一种基于分层设计的小家电控制板通用程序框架。分层设计有以下优点:
(1)降低系统复杂度。由于每层都是相对独立的,每层可以单独实现。
(2)隔离变化。通过分层设计,可以把变化的部分独立出来,让它们的变化不会给其他部分带来大的影响。
(3)具有良好的程序可移植性。
(4)具有良好的程序可维护性。
本文的程序框架以市电过零中断20ms,作为程序运行的滴答时钟。在主循环里每到20ms,执行一次,每次主程序循环一次的时间要小于20ms,且尽可能小,保证程序能及时响应。本文的分层设计,定义了三层架构;
第一层:系统层,位于程序最顶层。
第二层:任务层,系统层下的工作任务分配,位于程序中间层。
第三层:执行层,任务层下的执行过程,位于程序最底层。
图1 分层结构图
本文分层设计的实现过程:
1.针对小家电产品,系统层一般定义为四种事务:待机,开机,工作,告警。对于不同的小家电产品功能需求,系统层的事务定义可以适当裁剪或者增加。当接收到外部事件触发时,可以从一种事务切换到另一种事务。外部事件可以是按键,也可以是程序的事务处理,比如在工作事务,检测到异常,可以跳转到告警事务。
2.每种系统层的事务又有多个任务组成,以系统层下的工作事务为例,可以分为任务1,任务2,…,任务N。任务的切换一般是顺序切换,也就是执行完当前任务后,就跳转到下一任务。在任务层,当接收到外部事件触发时,可以返回到系统层。
3.每个任务下又可以分为多个执行过程,比如执行过程1,执行过程2,…,执行过程N。执行过程的切换和任务的切换类似,也是顺序切换。在执行层,当接收到外部事件触发时,可以返回到任务层或者系统层。
图2 小家电产品分层结构图
主程序代码框架:
Sys_State,Task_State,Exec_State分别对应系统层,任务层,执行层变量,程序运行中通过获取该三个变量的值,可知道程序当前运行在哪个状态下,具有良好的程序的可维护性。
bit time20ms;
unsigned char Sys_State; //对应系统层
unsigned char Task_State; //对应任务层
unsigned char Exec_State; //对应执行层
void Sys_Standy(void);
void Sys_PowerOn(void);
void Sys_Work(void);
void Sys_Alarm(void);while(1)
{if (time20ms){time20ms = 0;switch(Sys_State){case 待机: Sys_Standy();break;case 开机:Sys_PowerOn();break;case 工作:Sys_Work();break;case 告警:Sys_Alarm();break;default:break;}}
}
系统层下的工作事务代码框架
void Work_Task1(void);
void Work_Task2(void);
...
void Work_TaskN(void);void Sys_Work(void)
{switch(Task_State){case 任务1: Work_Task1();break;case 任务2Work_Task2();break;...case 任务N:Work_TaskN();break;default:break;}
}
工作事务下的任务1代码框架
void Work_Task1_Exec1(void);
void Work_Task1_Exec2(void);
...
void Work_Task1_ExecN(void);void Work_Task1(void)
{switch(Exec_StateState){case 执行过程1: Work_Task1_Exec1();break;case 执行过程2:Work_Task1_Exec2();break;...case 执行过程N:Work_Task1_ExecN();break;default:break;}
}
从示例代码可以看出,每一层的代码结构类似,都是基于状态机的编程。在设计过程中,需要定义好每一层的状态。当然并不是所有的系统层下都有任务层和执行层,任务层和执行层可以都没有,也可以只有任务层,这需要根据具体的小家电产品的功能需求来设计。任务层可以理解成当前系统层下有哪几个任务,执行层可以理解为完成某个任务有哪几个过程步骤。小家电产品的功能一般是顺序执行的过程,我们可以将功能细分成各个任务,每个任务在细分成各个执行过程。
一种基于分层设计的小家电控制板通用程序框架相关推荐
- 南京计算机学校李鑫,南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架...
原标题:南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架 目的: 基于工艺参数扰动及环境参数扰动,实现对芯片漏电功耗成品率及芯片时延成品率的双目标优化,得到分布均匀的帕累托优化解集. 创 ...
- java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...
- 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期
Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...
- gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...
- 一种基于分层聚合的3D实例分割方法(ICCV 2021)
Hierarchical Aggregation for 3D Instance Segmentation (ICCV 2021) 代码地址:https://github.com/hustvl/HAI ...
- 一种基于AliOS Things的uData感知设备软件框架
摘要: uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架. 点此 ...
- 基于cuda的开源程序_4种基于植物的饮食的开源应用程序
基于cuda的开源程序 减少肉类,奶制品和加工食品的消耗量,对地球和健康都有好处. 改变饮食习惯可能很困难,但是一些开源的Android应用程序可以帮助您切换到更多基于植物的饮食习惯. 无论您是按照M ...
- 基于modbus协议的工业自动化网络规范_一种基于Modbus的工业通信网关设计
近年来,随着工业自动化领域的发展,工业现场对网络的可靠性及成本有极高的要求.传统基于串口的工业网关可以满足工业现场的应用,但却要付出高额成本.一种基于 ModBus 设计的工业通信网关就走进人们的眼中 ...
- 微服务体系中的分层设计和领域划分!
上一篇:一个90后员工猝死的全过程 0.2T架构师学习资料干货分享 作者:汤波 来源:https://tbwork.org/2018/10/25/layed-dev-arch/ 本文获得阿里巴巴< ...
最新文章
- 详尽 | PyTorch动态图解析
- spring中aop设计与实现
- python函数能否增强代码可读性_总结的几个Python函数方法设计原则
- 计算机屏幕怎么睡眠状态,解决办法:显示器进入睡眠状态时如何解决问题
- c++-swap nodes in pairs
- UDP用打洞技术穿透NAT的原理与实现
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
- 「十年老测试」测试员的职场之路
- 项目--Asp.net全局变量的设置和读(web.config 和 Gloab)
- c++ 银行管理系统
- 医药电子 | 三轴加速度传感器的类型、原理、特点和应用
- 刘强东的漫漫情路:龚晓京、西红柿、奶茶...
- python 公众号引流_公众号粉丝从0到1000的引流思路
- Hive新特性reflect函数介绍
- deflate与gzip
- linux poodle漏洞,SSL POODLE[贵宾犬]漏洞的解决办法
- Yuuki and a problem (树套树)
- 单源最短路径bellman算法
- POJ 3692 Kindergarten(最大团)
- NB-IoT和eMTC对比
热门文章
- 智慧书-永恒的处世经典格言:41-80
- 【原创】2018年世界杯1/4淘汰赛盘口总结。
- Flutter仿京东
- idea报错:Parameter ‘userName‘ not found. Available parameters are [userinfo, param1]] with root cause
- 未来的计算机 教案,精选计算机教案四篇
- 六个案例,带你感受新零售服务市场的潜力
- yolov3_Assertion `l.outputs == params.inputs‘ failed
- 速达软件二次开发-单据佣金和毛利报表开发
- 用python可以做什么有趣的事作文_Python还能做这么有趣的事情!
- python开发autocad插件_Pycad: Python Extension for AutoCad