初级会员
- 积分
- 138
- 金钱
- 138
- 注册时间
- 2018-1-21
- 在线时间
- 46 小时
|
5金钱
本帖最后由 czw 于 2019-7-20 11:50 编辑
最近在备战电赛,准备一些LCD的一些界面设计,方便比赛的调试,同时也增加交互式,可能对比赛有点帮助,搜索一些资料后,决定先学习一下emWin,总体来说,emWin在STMF4中的使用还是比较方便的,特别是使用GuiBuilder更是直接生成界面代码,只需嵌入控制逻辑即可。但是,在使用过程遇到如下几个问题和疑问,希望得到大牛的帮助,谢谢大家:
1.emWin在使用过程中资源使用情况如何,会不会影响控制程序(例如我的程序需要5ms的中断进行PID计算)
在嵌入emWin主要是三个方面占用资源
a.界面需要刷新
- GUI_Delay(100);
- GUI_Exec();
复制代码 上面函数其中之一,实现界面的刷新,消耗资源情况未知。
b.需要使用触屏功能时,需要使用定时器不断地监控触摸屏接口
- TIM4_Init(999,839); //触摸屏扫描速度,100Hz
复制代码- //定时器4中断服务函数
- void TIM4_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
- {
- TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中断标志位
- GUI_TOUCH_Exec();
-
- }
- }
复制代码
这个是使用定时器产生更新中断实现的,中断频率可控,通常在50HZ以上效果较好
c.OS_TimeMS递增
使用TIM实现OS_TimeMS递增,1KHz貌似使用得资源还是比较大的,虽然说计算不多(此处仅仅是自己猜想)
- TIM3_Init(999,83); //1KHZ 定时器3设置为1ms
复制代码- //定时器3中断服务函数
- void TIM3_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
- {
- OS_TimeMS++;
- }
- TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
- }
复制代码 同样的,这个OS_TimeMS在系统中的作用是什么,目前查询的资料得出得结果是作为emWin参考时钟变量。
d.目前想出解决emWin占用资源的解决方案
在我的PID计算周期,也就是说任务开始,不需要界面显示得时候我将
(1).不再刷新界面-->不执行 GUI_Delay(100) / GUI_Exec().
(2).不监控触摸屏 ,停止TIM4更新中断,不监控 GUI_TOUCH_Exec();
(3).停止OS_TimeMS递增,停止TIM3更新中断
希望熟悉emWin的大牛可以解答我的疑问,感谢!!!
|
|