野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7316|回复: 2

[emWin] EemWin占用资源

[复制链接]
发表于 2019-7-20 11:47:04 | 显示全部楼层 |阅读模式
本帖最后由 Wechen 于 2019-7-20 11:49 编辑

最近在备战电赛,准备一些LCD的一些界面设计,方便比赛的调试,同时也增加交互式,可能对比赛有点帮助,搜索一些资料后,决定先学习一下emWin,总体来说,emWin在STMF4中的使用还是比较方便的,特别是使用GuiBuilder更是直接生成界面代码,只需嵌入控制逻辑即可。但是,在使用过程遇到如下几个问题和疑问,希望得到大牛的帮助,谢谢大家:
       1.emWin在使用过程中资源使用情况如何,会不会影响控制程序(例如我的程序需要5ms的中断进行PID计算)
     在嵌入emWin主要是三个方面占用资源
       a.界面需要刷新
  1.   GUI_Delay(100);
  2.   GUI_Exec();
复制代码
         上面函数其中之一,实现界面的刷新,消耗资源情况未知。

        b.需要使用触屏功能时,需要使用定时器不断地监控触摸屏接口
  1. TIM4_Init(999,839);  //触摸屏扫描速度,100Hz
复制代码
        [mw_shl_code=c,true]//定时器4中断服务函数
void TIM4_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
        {
                TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //清除中断标志位
                GUI_TOUCH_Exec();
               
        }
}[/mw_shl_code]

       这个是使用定时器产生更新中断实现的,中断频率可控,通常在50HZ以上效果较好
       c.OS_TimeMS递增
       使用TIM实现OS_TimeMS递增,1KHz貌似使用得资源还是比较大的,虽然说计算不多(此处仅仅是自己猜想)
  1. TIM3_Init(999,83);             //1KHZ 定时器3设置为1ms
复制代码
  1. //定时器3中断服务函数
  2. void TIM3_IRQHandler(void)
  3. {
  4.         if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
  5.         {
  6.                 OS_TimeMS++;
  7.         }
  8.         TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中断标志位
  9. }
复制代码
        同样的,这个OS_TimeMS在系统中的作用是什么,目前查询的资料得出得结果是作为emWin参考时钟变量。
        d.目前想出解决emWin占用资源的解决方案
        在我的PID计算周期,也就是说任务开始,不需要界面显示得时候我将
              (1).不再刷新界面-->不执行 GUI_Delay(100) / GUI_Exec().
              (2).不监控触摸屏 ,停止TIM4更新中断,不监控 GUI_TOUCH_Exec();
              (3).停止OS_TimeMS递增,停止TIM3更新中断
希望熟悉emWin的大牛可以解答我的疑问,感谢!!!


回复

使用道具 举报

发表于 2019-7-20 12:02:38 | 显示全部楼层
帮顶
回复

使用道具 举报

发表于 2019-7-22 16:42:41 | 显示全部楼层
本帖最后由 廷润 于 2019-7-22 16:45 编辑

首先你需要交互的内容没提,硬件模块的处理紧要程度和时间也没提,这两方面很重要。

我之前做产品的时候,正常emWin主菜单就六个图标切换选择,外加一个电量显示。这个想怎么搞就怎么搞。
但是进入核心功能的时候,初始化需要200ms,并且初始化前还要读EEPROM的数据,如果不上系统,emWin消息处理过程中途掺杂大延时,会有问题。对于我的产品,提前那EEPROM数据,初始化硬件I2C的设备模块都非常紧急、重要, 我上的是FreeRTOS做了合理的协调安排,体验会快一些,好一些。

GUI_Delay(100) / GUI_Exec(). 这个函数没必要想太多。如果没有需要更新的画面内容,不会刷新屏幕的,中途用2D画内容,如果不设置无效区,后面画的内容都显示不出来。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-17 01:36 , Processed in 0.037060 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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