硬汉嵌入式论坛

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

[emWin] 窗口定时器导致界面崩溃

[复制链接]

14

主题

17

回帖

59

积分

初级会员

积分
59
发表于 2015-2-4 11:39:32 | 显示全部楼层 |阅读模式
各路大神,请教一个问题!我用emwin做的一个界面,是OS中的一个任务模块,还有一个通讯模块。在跑通讯的情况下,我也跑界面,界面上的变量是30s刷新一次。这样的情况跑2个小时就挂了。如果单独是界面或者通讯都可以跑很久。如果我开通讯,开一个没有定时器的界面,也可以跑很久。 是不是emwin的定时机制有问题啊。在一般情况,比较大的程序,刷新界面的变量是用什么机制的呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2015-2-4 20:53:23 | 显示全部楼层
emWin的定时器是没有问题的。你把emwin的任务和通讯任务的堆栈空间开大一些试试。
回复

使用道具 举报

14

主题

17

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2015-2-5 11:29:13 | 显示全部楼层
硬汉,我把界面的通讯的堆栈也不行。现在我的情况是这样的:在不更改堆栈大小的情况,只开主界面,可以跑很久。如果开二级页面,就2个小时的就挂了。我的大概框架是这样的:
1)在桌面窗口上建立一个窗口hmain,有小图标有背景图片(主窗口)
2)在小图标进入后,新建一个窗口,上面有菜单按钮。
3)在菜单按钮后进入一个监控页面,该页面就有一些文字信息,每隔30s刷新一次。
就是这样,在第3)个窗口就刷挂了。这样会不会开辟窗口太多了。很容易四级啊。gui的堆栈为2K,动态内存为500K。
回复

使用道具 举报

14

主题

17

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2015-2-5 11:30:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:emWin的定时器是没有问题的。你把emwin的任务和通讯任务的堆栈空间开大一些试试。 (2015-02-04 20:53)
硬汉,我把界面的通讯的堆栈也不行。现在我的情况是这样的:在不更改堆栈大小的情况,只开主界面,可以跑很久。如果开二级页面,就2个小时的就挂了。我的大概框架是这样的:
1)在桌面窗口上建立一个窗口hmain,有小图标有背景图片(主窗口)
2)在小图标进入后,新建一个窗口,上面有菜单按钮。
3)在菜单按钮后进入一个监控页面,该页面就有一些文字信息,每隔30s刷新一次。
就是这样,在第3)个窗口就刷挂了。这样会不会开辟窗口太多了。很容易四级啊。gui的堆栈为2K,动态内存为500K。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2015-2-5 14:43:09 | 显示全部楼层

回 云开yunming 的帖子

云开yunming:硬汉,我把界面的通讯的堆栈也不行。现在我的情况是这样的:在不更改堆栈大小的情况,只开主界面,可以跑很久。如果开二级页面,就2个小时的就挂了。我的大概框架是这样的:
1)在桌面窗口上建立一个窗口hmain,有小图标有背景图片(主窗口)
2)在小图标进入后,新建一个窗口, .. (2015-02-05 11:30) 
堆栈小了,至少4k以上。建议设为8K或者16k。

动态内存是足够的,我的界面800x480的设定30k都只用了一半。
回复

使用道具 举报

14

主题

17

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2015-2-5 20:17:05 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:堆栈小了,至少4k以上。建议设为8K或者16k。

动态内存是足够的,我的界面800x480的设定30k都只用了一半。 (2015-02-05 14:43)
硬汉,谢谢!我把界面的堆栈开辟为4K,编译时候会提示执行空间不够。怎么样可以程序其他变量定义到外扩的SRAM中的中。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2015-2-6 10:09:07 | 显示全部楼层

回 云开yunming 的帖子

云开yunming:硬汉,谢谢!我把界面的堆栈开辟为4K,编译时候会提示执行空间不够。怎么样可以程序其他变量定义到外扩的SRAM中的中。 (2015-02-05 20:17) 
不要这样搞,任务的堆栈空间一定要用芯片内部的RAM,要不太影响实时性。
回复

使用道具 举报

14

主题

17

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2015-2-6 10:50:47 | 显示全部楼层

回 eric2013 的帖子

eric2013:不要这样搞,任务的堆栈空间一定要用芯片内部的RAM,要不太影响实时性。 (2015-02-06 10:09)
好的,谢谢。但是我每一秒都利用函数OSTaskStkChk打印出每个任务的堆栈检测,但是没有看到GUI的利用率很高,很有很多的空间。如果我设为1K,堆栈的利用率为40%不到。请教一下,每次高级中断进来的时候,界面会把那些信息网堆栈里面放置呢? 我开了三级界面,这个会不会占用很多资源啊,麻烦你帮我看看前面我提到的框架。这样开启的窗口太多了吗? 通讯模块的堆栈利用率也很低。 但是两者开启就是跑几个小时,就挂了。
回复

使用道具 举报

8

主题

51

回帖

8

积分

初级会员

一起来学习

积分
8
发表于 2015-9-1 15:54:05 | 显示全部楼层
[s:139] 楼主解决了吗,我也遇到这问题了,定时器影响触摸
求支援
回复

使用道具 举报

8

主题

51

回帖

8

积分

初级会员

一起来学习

积分
8
发表于 2015-9-1 15:57:30 | 显示全部楼层
在重绘函数里面绘制一个图片,然后让定时器定时移动,可以实现移动,但是会越来越慢还有会影响触摸的功能,我定时让窗口无效,定时重绘,不知道为什么?用for或者while循环也是可以的,但是那样会阻塞在那里。。。。。
求支援
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 20:16 , Processed in 0.043802 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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