硬汉嵌入式论坛

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

[emWin] GUI_Delay()非常不准。。。内涵不清楚

[复制链接]

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2015-4-19 21:49:17 | 显示全部楼层 |阅读模式
在同一个程序中,实验GUI_Delay(x)的实际时间。
x=1,      10,       100和   200时;在同一个窗口显示界面中,函数消耗的时间约为
0.4ms;7.7ms;   78ms;  240ms  
如果切换到另一个窗口,这个时间有很大的变化。

在这个函数中到底执行了什么? 为了emwin的占用资源最少,能否只用GUI_Delay(1);  ?   为什么大多数都是使用100或500作为参数
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2015-4-20 09:01:16 | 显示全部楼层
是不是用RTOS了。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
 楼主| 发表于 2015-4-20 09:43:59 | 显示全部楼层

回 eric2013 的帖子

eric2013:是不是用RTOS了。 (2015-04-20 09:01) 
没有用RTOS。
但是几个窗口用了timer,估计会影响一下。

其中Graphic控件影响最大,因为要刷新显示,每隔0.5s需要更新200个数据,大约耗时20ms。

所有计时都是以debug界面的cpu时间算出来的,已经考虑了PLL。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2015-4-20 11:56:52 | 显示全部楼层
我有个地方不理解的是怎么还会运行的时间比设置的少,比如你设置的GUI_Delay(1),你测试出来的是0.4ms。
你提供的时钟基准是1ms吧。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
 楼主| 发表于 2015-4-20 12:40:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:我有个地方不理解的是怎么还会运行的时间比设置的少,比如你设置的GUI_Delay(1),你测试出来的是0.4ms。
你提供的时钟基准是1ms吧。 (2015-04-20 11:56) 
我怀疑,每个1ms,delay减一,emwin都会扫描所有的wm消息。然后退出。

如果delay(100)的话,99个ms是准确的,最后1ms是消息处理的时间。
回复

使用道具 举报

33

主题

204

回帖

303

积分

高级会员

积分
303
发表于 2015-4-20 14:04:37 | 显示全部楼层
3.9版
void GUI_Delay(int Period) {
  int EndTime = GUI_GetTime()+Period;
  int tRem; /* remaining Time */
  GUI_ASSERT_NO_LOCK();
  while (tRem = EndTime- GUI_GetTime(), tRem>0) {
    GUI_Exec();
    GUI_X_Delay((tRem >5) ? 5 : tRem);
  }
}
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
 楼主| 发表于 2015-4-20 16:41:16 | 显示全部楼层
看来真的是不准。。。如果单次wm消息执行完后,还剩余5ms以上,就会执行多次GUI_Exec()。

  while (tRem = EndTime- GUI_GetTime(), tRem>0) {   //先计算剩余时间 tRem,以5为单位
    GUI_Exec();                                                                      //再执行wm消息
    GUI_X_Delay((tRem >5) ? 5 : tRem);                          //有个容差,大于5ms算5ms。 所以, 一般5ms刷新一次wm消息,。
  }                                                                                     //如果设定GUI_Delay小于5ms,那么都是一样的,只执行一次wm消息。
回复

使用道具 举报

35

主题

116

回帖

221

积分

高级会员

程序小白

积分
221
QQ
发表于 2019-12-18 11:17:54 | 显示全部楼层
新手求教:GUI_Delay(x),裸机的情况下。这个X到底取多少合适?以V6的板子,实际测试例子 X取10  ,100效果都一样。 有什么依据在里面吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2019-12-18 11:47:37 | 显示全部楼层
清风徐来 发表于 2019-12-18 11:17
新手求教:GUI_Delay(x),裸机的情况下。这个X到底取多少合适?以V6的板子,实际测试例子 X取10  ,100效果 ...

在满足界面要求的情况下,延迟时间长点好。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 18:00 , Processed in 0.607734 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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