硬汉嵌入式论坛

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

[emWin] WM_MULTIBUF_Enable导致HardFault

[复制链接]

29

主题

77

回帖

164

积分

初级会员

积分
164
发表于 2018-6-21 17:03:41 | 显示全部楼层 |阅读模式
使用STemWIN4.0,使用WM_SetCreateFlags时一切正常,使用WM_MULTIBUF_Enable(1);一旦开始执行窗口管理器,创建窗口或者创建窗口对象出现HardFault;

emWIN运行内存分配300Kb;240*320的屏使用RGB565接口。是内存不够吗?还是驱动三缓冲有问题。


回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-6-21 17:05:14 | 显示全部楼层
我改成双缓冲都没用
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
发表于 2018-6-21 18:04:24 | 显示全部楼层
看下三缓冲所需要的显存空间是不是分配够了。分配不够会出异常的,每个缓冲需要一个320*240*2字节,总大小需要320*240*2*3
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-6-21 18:13:17 | 显示全部楼层
eric2013 发表于 2018-6-21 18:04
看下三缓冲所需要的显存空间是不是分配够了。分配不够会出异常的,每个缓冲需要一个320*240*2字节,总大小 ...

我用的内部RAM,不够那么大,改成双缓冲,分配大于320*240*2*2的emWIN运行空间。还是有问题,估计不是这个问题,我查查驱动移植是不是对吧
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-6-21 18:26:56 | 显示全部楼层
eric2013 发表于 2018-6-21 18:04
看下三缓冲所需要的显存空间是不是分配够了。分配不够会出异常的,每个缓冲需要一个320*240*2字节,总大小 ...

故障报告图片这些信息

2

2

1

1
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
发表于 2018-6-22 01:38:44 | 显示全部楼层
如果多缓冲问题无法解决的话,就使用存储设备就好了,因为你用的是内部SRAM,而且显示屏分辨率较小,速度也非常快的。
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-7-7 21:37:58 | 显示全部楼层
eric2013 发表于 2018-6-22 01:38
如果多缓冲问题无法解决的话,就使用存储设备就好了,因为你用的是内部SRAM,而且显示屏分辨率较小,速度也 ...

这个主要是当用SWIPELIST控件时,滑动会有撕裂感,而且发现开启Alpha混合,滑动窗口也有撕裂感
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-7-7 21:39:22 | 显示全部楼层
eric2013 发表于 2018-6-22 01:38
如果多缓冲问题无法解决的话,就使用存储设备就好了,因为你用的是内部SRAM,而且显示屏分辨率较小,速度也 ...

我把驱动,直接换成官方的都不行,用STemWIN2.8还都是这种现象
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
发表于 2018-7-9 02:46:20 | 显示全部楼层
hecudashi 发表于 2018-7-7 21:39
我把驱动,直接换成官方的都不行,用STemWIN2.8还都是这种现象

估计还是动态内存太小。你显示对话框,然后拖动,拖动时候看看对话框边界是不是有撕裂感。
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-7-20 13:52:20 | 显示全部楼层
eric2013 发表于 2018-7-9 02:46
估计还是动态内存太小。你显示对话框,然后拖动,拖动时候看看对话框边界是不是有撕裂感。

这个问题我测试了一下,发现确实是内存不够导致的,我把液晶屏分辨率修改为240*100不会出现死机情况,在往上设置就不行了。但是发现修改分配给GUI的内存大小并不影响该结果,即我从400Kb修改到10Kb多缓冲仍然能正常工作。这个有点怪,而且用函数GUI_ALLOC_GetNumFreeBytes查看,剩余空间仍然很多,多缓冲确实不占用该空间。很迷惑
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
 楼主| 发表于 2018-10-19 11:22:02 | 显示全部楼层
是我理解问题,多缓冲是显存要分配够,跟动态内存大小无关,一直以为多缓冲消耗的是动态内存,被某原子注释误导了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 00:16 , Processed in 0.192601 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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