硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4758|回复: 7
收起左侧

[emWin] RA8875触摸处理的新思路

[复制链接]

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2015-5-19 11:02:07 | 显示全部楼层 |阅读模式
由于以前RA8875在执行触摸函数的时候是利用systick中断,每10ms执行一次GUI_TOUCH_Exec(),中断优先级高,会打断正常的RA8875的画图过程,造成显示黑线之类的。
如果放在main()的主循环while(1){GUI_TOUCH_Exec();....}中,又可能查询间隔太长,偶尔响应比较慢。

方法:在emwin5.22以后的版本中,注意到有个GUI定时器函数GUI_TIMER_Create(),这个可以利用起来,比如定个10ms,在这个定时器的回调函数中加入GUI_TOUCH_Exec(),等效于RTOS中的一个定时任务。
这样子emwin就会自己定时处理这个触摸函数,不会造成中断的问题。

评分

参与人数 1 +5 收起 理由
eric2013 + 5

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-5-19 12:28:52 | 显示全部楼层
楼主说的是裸机情况下吧。
这个方法也很好,有一个小缺点就是不能使用触摸存储参数的FIFO特性了,基本上触摸跟屏幕的刷新是一起进行的。

感谢楼主分享
回复

使用道具 举报

4

主题

64

回帖

76

积分

初级会员

积分
76
发表于 2015-5-19 12:58:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:楼主说的是裸机情况下吧。
这个方法也很好,有一个小缺点就是不能使用触摸存储参数的FIFO特性了,基本上触摸跟屏幕的刷新是一起进行的。

感谢楼主分享

....... (2015-05-19 12:28) 
带OS 是不是不能用GUI_TIMER_Create(),,我在带OS的环境下只执行了一次
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-5-19 13:03:51 | 显示全部楼层

回 heitu103 的帖子

heitu103:带OS 是不是不能用GUI_TIMER_Create(),,我在带OS的环境下只执行了一次 (2015-05-19 12:58) 
可以的,记得在TIMER消息里面复位一下重新开启,TIMER初始化后只执行一次。每次进入TIMER消息后一定得重新启动下。
回复

使用道具 举报

4

主题

64

回帖

76

积分

初级会员

积分
76
发表于 2015-5-20 18:02:35 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以的,记得在TIMER消息里面复位一下重新开启,TIMER初始化后只执行一次。每次进入TIMER消息后一定得重新启动下。 (2015-05-19 13:03) 
老大搞emwin好牛逼,是不是有什么诀窍
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-5-20 18:33:12 | 显示全部楼层

回 heitu103 的帖子

heitu103:老大搞emwin好牛逼,是不是有什么诀窍 (2015-05-20 18:02) 
过奖了,论坛上问的问题多了,我也就知道了。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
 楼主| 发表于 2015-5-23 17:32:41 | 显示全部楼层
今天有空,几分钟就好了。效果不错。

开头申明: static void _cbTouchTimer(GUI_TIMER_MESSAGE * pTM); //GUI全局timer,用来刷新触摸的读取,20ms间隔
main函数中加入: GUI_TIMER_Create(_cbTouchTimer,20,1,0); //后面的1和0无关紧要,可参考英文版emwin5.26的说明书

这个定时器的回调函数:
static void _cbTouchTimer(GUI_TIMER_MESSAGE * pTM)
{
    GUI_TOUCH_Exec(); //
    GUI_TIMER_Restart(pTM->hTimer);
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-5-24 00:44:31 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:今天有空,几分钟就好了。效果不错。

开头申明: static void _cbTouchTimer(GUI_TIMER_MESSAGE * pTM); //GUI全局timer,用来刷新触摸的读取,20ms间隔
main函数中加入: GUI_TIMER_Create(_cbTouchTimer,20,1,0); //后面的1和0无关紧要,可参考英文版emwin5.26的说明书

..... .. (2015-05-23 17:32) 
[s:151]
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-12 16:33 , Processed in 0.423709 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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