OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4989|回复: 7

状态机驱动GUI实践分享,强思路弱细节。

[复制链接]

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-11-26 15:40:57 | 显示全部楼层 |阅读模式
状态机可以有效去耦合,只谈GUI的时序也完全无障碍。
状态图:


设计初衷为单状态,因而没有多状态迁移。
事件源有3个:数据更新/超时(时基)/设置包,至于触摸或键盘的输入,我把它作为内部事务,由GUI内部处理。
它响应图中3个事件,进而更新显示界面。

实现说明(细节没有列出):
[mw_shl_code=c,true]static QState GUI_Display_GUI(GUI_Display * const me, QEvt const * const e) { switch (e->sig) { case Q_ENTRY_SIG: { /* emWin初始化 */ break; } case DATA_UPDATE_SIG: { /* 更新数据,界面更新驱动 */[/mw_shl_code] [mw_shl_code=c,true] } case TIMEOUT_SIG:{ /* 调用GUI运行API */ break; } case SETTING_RCV_SIG: { /* 收到设置包,提取并保存 */ break; } default: { break; } } return status_; }[/mw_shl_code]
1.入口事件触发初始化;
2.超时事件,最频繁,调用GUI_Exec()/GUI_Scan_Keyboard()等代码作为时基驱动GUI工作,通常为50Hz;
3.数据更新事件,数据由GUI保存,必要时可通过它触发实时界面刷新;
4.设置变更事件,触发非界面产生的配置变更,比如通信接口发来的命令。

总的来说,GUI外部事务非常清楚,可以集中精力于内部代码设计。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-11-26 15:44:20 | 显示全部楼层
感谢分享,要好好学习学习!
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-11-26 16:31:33 | 显示全部楼层
先mark-----状态机驱动GUI,学到再研究,谢谢分享
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

13

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2012-11-17
在线时间
18 小时
发表于 2015-11-26 18:17:37 | 显示全部楼层
第一张图不是用的QP中那个那个QM工具吗?

www.state-machine.com里的
回复 支持 反对

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
 楼主| 发表于 2015-11-26 20:08:23 | 显示全部楼层
回复【4楼】bj2008wyou:
---------------------------------
正是,看来是同道中人。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-11-26 22:48:21 | 显示全部楼层
谢谢分享....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

163

帖子

0

精华

高级会员

Rank: 4

积分
615
金钱
615
注册时间
2011-11-7
在线时间
180 小时
发表于 2015-11-26 23:53:10 | 显示全部楼层
最近在做单色点阵液晶的界面,用了switch实现,不过修改起来比较麻烦
回复 支持 反对

使用道具 举报

5

主题

163

帖子

0

精华

高级会员

Rank: 4

积分
615
金钱
615
注册时间
2011-11-7
在线时间
180 小时
发表于 2015-11-26 23:53:30 | 显示全部楼层
学习一下,状态机是个好东西
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 10:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表