硬汉嵌入式论坛

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

[emWin] 关于存储设备引起hardfault的问题

[复制链接]

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
发表于 2016-12-29 20:57:17 | 显示全部楼层 |阅读模式
最近一直搞EMWIN,遇到很多问题,今天又遇到一个很奇怪的问题,百思不得解,请求大家一起来看下!
QQ截图20161229203624.jpg 在一个窗体的侧边栏有一排快捷菜单,现在我想点击CALC这个计算器,直接跳转到计算器的界面, 计算器的界面已经做好了,在另一个桌面,专门有个计算器的图标,点击进去是没问题的,已经封装成了一个函数WFGUI_CALC(); 现在我实现过程是这样的,点击侧边栏计算器图标后,我会先删除侧边栏窗口,然后隐藏当前主窗体, 再执行WFGUI_CALC();调出计算器界面,当计算器被关闭后,我再用WM_Show()显示隐藏的那个窗体. 代码如下:

QQ截图20161229204502.jpg case 1则对应点击计算器图标. 有删除侧边栏, 获取顶层窗口然后隐藏它, 接着调用计算器界面过程.

QQ截图20161229204715.jpg 接下来是WFGUI_Calc()函数初始化界面过程. 关键就在这里了, 我画框的地方, 其实就建立了一个存储设备, 然后选中它,再取消它,其实啥也没做,奇怪的就是这段我不加的话,直接执行完这个函数就进入hardfault()了. 按理论上应该跟它没半点关系啊. 唯一想到的联系是,我调用计算器的那个界面也使用了存储设备,而且它并没被释放掉, 那个窗体只是被隐藏了,当计算器关闭时我来要调那个存储设备.

QQ截图20161229205335.jpg QQ截图20161229205358.jpg 这之间有啥联系吗?怎么想也没相通怎么会出现硬件错误的,求解释下,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-30 00:56:38 | 显示全部楼层
1.  你的动态内存应该够用吧,先检查下,有个专门的函数,可以检测
2.  用RTOS了没有,如果用了的话,加大emWin任务的栈空间,如果没有用RTOS,需要在工程的启动文件里面加大栈空间。

如果上面两个修改后还有问题,就得排查下你的emWin实现了,从你提供的代码来看,没有发现什么问题。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-30 09:00:13 | 显示全部楼层
emwin动态内存开的8M, 用的ucos, 从测试情况看,内存与任务栈都是充足的.

执行计算器前获取内存

执行计算器前获取内存

动态内存情况

动态内存情况

ucos栈情况

ucos栈情况

目前的情况是要增加开辟存储设备才不会出现hardfault,
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, 2, 2, GUI_MEMDEV_NOTRANS);
GUI_MEMDEV_Select(hMemBMP);
GUI_MEMDEV_Select(0);
而不是减少, 这样就不应该是内存不足的问题吧.  只要把上面3句屏蔽,每次必定hardfault
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-30 09:08:58 | 显示全部楼层
而且开辟的这个存储设备不能删除,创建后马上删除一样会hardfault,

//跟存储设备创建的大小还有后面那个参数都没关系, 只要创建了(不删除)就不会hardfault.
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, 2, 2, GUI_MEMDEV_NOTRANS);
GUI_MEMDEV_Select(hMemBMP);
GUI_MEMDEV_Select(0);
GUI_MEMDEV_Delete(hMemBMP);  //增加删除操作, WFGUI_Calc()最后一句GUI_Delay(50);后进入hardfault
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-30 09:15:19 | 显示全部楼层
如果不从侧边栏调用计算器, 不加上面那开存储设备的3句, 单独调用WFGUI_Calc()是没任何问题的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-30 09:20:24 | 显示全部楼层

回 costar 的帖子

costar:如果不从侧边栏调用计算器, 不加上面那开存储设备的3句, 单独调用WFGUI_Calc()是没任何问题的 (2016-12-30 09:15)
创建的计算器界面WFGUI_Calc()的父窗口是那个。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-30 10:46:57 | 显示全部楼层
QQ截图20161230104517.jpg 桌面窗口
回复

使用道具 举报

9

主题

113

回帖

145

积分

初级会员

积分
145
发表于 2017-2-7 11:31:30 | 显示全部楼层

回 costar 的帖子

costar:emwin动态内存开的8M, 用的ucos, 从测试情况看,内存与任务栈都是充足的.

目前的情况是要增加开辟存储设备才不会出现hardfault,
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, 2, 2, GUI_MEMDEV_NOTRANS);
GUI_MEMDEV_Select(hMem .. (2016-12-30 09:00) 
Hello, 能否告知用来统计任务运行情况的软件叫啥?
回复

使用道具 举报

3

主题

24

回帖

33

积分

新手上路

积分
33
发表于 2017-2-7 13:48:14 | 显示全部楼层
看上去 char *_acBuffer  没有初始化呀。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2017-2-7 16:10:38 | 显示全部楼层

回 abl 的帖子

abl:看上去 char *_acBuffer  没有初始化呀。 (2017-02-07 13:48) 
该指针的实体化在_ReadBitmapFile函数内部,初始化后指向图片数据流起始位置
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2017-2-7 16:11:24 | 显示全部楼层

回 yanchao7788 的帖子

yanchao7788:Hello, 能否告知用来统计任务运行情况的软件叫啥? (2017-02-07 11:31) 
Micrium uC-Probe
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 02:25 , Processed in 0.300478 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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