本文设计了一种基于分层设计的小家电控制板通用程序框架。分层设计有以下优点:
(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;}
}

从示例代码可以看出,每一层的代码结构类似,都是基于状态机的编程。在设计过程中,需要定义好每一层的状态。当然并不是所有的系统层下都有任务层和执行层,任务层和执行层可以都没有,也可以只有任务层,这需要根据具体的小家电产品的功能需求来设计。任务层可以理解成当前系统层下有哪几个任务,执行层可以理解为完成某个任务有哪几个过程步骤。小家电产品的功能一般是顺序执行的过程,我们可以将功能细分成各个任务,每个任务在细分成各个执行过程。

一种基于分层设计的小家电控制板通用程序框架相关推荐

  1. 南京计算机学校李鑫,南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架...

    原标题:南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架 目的: 基于工艺参数扰动及环境参数扰动,实现对芯片漏电功耗成品率及芯片时延成品率的双目标优化,得到分布均匀的帕累托优化解集. 创 ...

  2. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...

    本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...

  3. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  4. gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架

    gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...

  5. 一种基于分层聚合的3D实例分割方法(ICCV 2021)

    Hierarchical Aggregation for 3D Instance Segmentation (ICCV 2021) 代码地址:https://github.com/hustvl/HAI ...

  6. 一种基于AliOS Things的uData感知设备软件框架

    摘要:   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架. 点此 ...

  7. 基于cuda的开源程序_4种基于植物的饮食的开源应用程序

    基于cuda的开源程序 减少肉类,奶制品和加工食品的消耗量,对地球和健康都有好处. 改变饮食习惯可能很困难,但是一些开源的Android应用程序可以帮助您切换到更多基于植物的饮食习惯. 无论您是按照M ...

  8. 基于modbus协议的工业自动化网络规范_一种基于Modbus的工业通信网关设计

    近年来,随着工业自动化领域的发展,工业现场对网络的可靠性及成本有极高的要求.传统基于串口的工业网关可以满足工业现场的应用,但却要付出高额成本.一种基于 ModBus 设计的工业通信网关就走进人们的眼中 ...

  9. 微服务体系中的分层设计和领域划分!

    上一篇:一个90后员工猝死的全过程 0.2T架构师学习资料干货分享 作者:汤波 来源:https://tbwork.org/2018/10/25/layed-dev-arch/ 本文获得阿里巴巴< ...

最新文章

  1. 详尽 | PyTorch动态图解析
  2. spring中aop设计与实现
  3. python函数能否增强代码可读性_总结的几个Python函数方法设计原则
  4. 计算机屏幕怎么睡眠状态,解决办法:显示器进入睡眠状态时如何解决问题
  5. c++-swap nodes in pairs
  6. UDP用打洞技术穿透NAT的原理与实现
  7. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
  8. 「十年老测试」测试员的职场之路
  9. 项目--Asp.net全局变量的设置和读(web.config 和 Gloab)
  10. c++ 银行管理系统
  11. 医药电子 | 三轴加速度传感器的类型、原理、特点和应用
  12. 刘强东的漫漫情路:龚晓京、西红柿、奶茶...
  13. python 公众号引流_公众号粉丝从0到1000的引流思路
  14. Hive新特性reflect函数介绍
  15. deflate与gzip
  16. linux poodle漏洞,SSL POODLE[贵宾犬]漏洞的解决办法
  17. Yuuki and a problem (树套树)
  18. 单源最短路径bellman算法
  19. POJ 3692 Kindergarten(最大团)
  20. NB-IoT和eMTC对比

热门文章

  1. 智慧书-永恒的处世经典格言:41-80
  2. 【原创】2018年世界杯1/4淘汰赛盘口总结。
  3. Flutter仿京东
  4. idea报错:Parameter ‘userName‘ not found. Available parameters are [userinfo, param1]] with root cause
  5. 未来的计算机 教案,精选计算机教案四篇
  6. 六个案例,带你感受新零售服务市场的潜力
  7. yolov3_Assertion `l.outputs == params.inputs‘ failed
  8. 速达软件二次开发-单据佣金和毛利报表开发
  9. 用python可以做什么有趣的事作文_Python还能做这么有趣的事情!
  10. python开发autocad插件_Pycad: Python Extension for AutoCad