硬汉嵌入式论坛

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

[emWin] emWin动态内存分配的小,如何实现动效?

[复制链接]

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2019-7-15 10:46:42 | 显示全部楼层 |阅读模式
本帖最后由 风动影动 于 2019-7-15 10:54 编辑

emWin的手册说明,使用一些图形、窗口动效需要使用存储设备,并且对内存消耗比较大。


如果我的屏幕是128*96的OLED、16灰阶屏,动态内存的分配一定要大于1M吗?
我用模拟器实测小于1M的动态内存,没有动画效果。大于1M就会有特效。
目前我只能给emwin动态内存40K的大小(单片机的RAM,没加外部RAM),有没有好方法,实现这些移窗、旋转、淡入淡出的特效。

模拟器配置:


回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-7-15 11:30:39 | 显示全部楼层
/*********************************************************************
*
*       Dynamic memory management
*/
typedef struct {
  U32 TotalBytes;
  U32 FreeBytes;
  U32 UsedBytes;
  U32 AllocSize;
  U32 NumFixedBytes;
  U32 MaxUsedBytes;
} GUI_ALLOC_INFO;

GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBlocks(void);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBytes (void);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBlocks(void);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBytes (void);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxUsedBytes (void);

void GUI_ALLOC_GetMemInfo  (GUI_ALLOC_INFO * pInfo);
void GUI_ALLOC_SuppressPeak(int OnOff);

GUI_HMEM           GUI_ALLOC_AllocInit       (const void * pInitData, GUI_ALLOC_DATATYPE Size);
GUI_HMEM           GUI_ALLOC_AllocNoInit     (GUI_ALLOC_DATATYPE size);
GUI_HMEM           GUI_ALLOC_AllocZero       (GUI_ALLOC_DATATYPE size);
void               GUI_ALLOC_AssignMemory    (void * p, U32 NumBytes);
void               GUI_ALLOC_Free            (GUI_HMEM  hMem);
void               GUI_ALLOC_FreeFixedBlock  (void * p);
void               GUI_ALLOC_FreePtrArray    (GUI_HMEM * pArray, int NumElems);
void               GUI_ALLOC_FreePtr         (GUI_HMEM * phMem);
void *             GUI_ALLOC_GetFixedBlock   (GUI_ALLOC_DATATYPE Size);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxSize      (void);
GUI_ALLOC_DATATYPE GUI_ALLOC_GetSize         (GUI_HMEM  hMem);
void *             GUI_ALLOC_h2p             (GUI_HMEM  hMem);
GUI_HMEM           GUI_ALLOC_p2h             (void * p);
void               GUI_ALLOC_Init            (void);
void               GUI_ALLOC_Lock            (void);
void *             GUI_ALLOC_LockH           (GUI_HMEM  hMem);
GUI_HMEM           GUI_ALLOC_Realloc         (GUI_HMEM hOld, int NewSize);
GUI_ALLOC_DATATYPE GUI_ALLOC_RequestSize     (void);
void               GUI_ALLOC_SetAvBlockSize  (U32 BlockSize);
void               GUI_ALLOC_Unlock          (void);
void *             GUI_ALLOC_UnlockH         (void ** pp);
int                GUI_ALLOC_SetMaxPercentage(int MaxPercentage);
void               GUI_ALLOC_Exit            (void);
代码不规范,亲人两行泪!
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-7-15 13:32:58 | 显示全部楼层
本帖最后由 风动影动 于 2019-7-15 13:41 编辑

emWin的手册说明,使用一些图形、窗口动效需要使用存储设备,并且对内存消耗比较大。


如果我的屏幕是128*96的OLED、16灰阶屏,动态内存的分配一定要大于1M吗?
我用模拟器实测小于1M的动态内存,没有动画效果。大于1M就会有特效。
目前我只能给emwin动态内存40K的大小(单片机的RAM,没加外部RAM),有没有好方法,实现这些移窗、旋转、淡入淡出的特效。

模拟器配置:

火狐截图_2019-07-15T05-39-20.505Z.png
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-7-15 13:33:39 | 显示全部楼层
emWin的手册说明,使用一些图形、窗口动效需要使用存储设备,并且对内存消耗比较大。

如果我的屏幕是128*96的OLED、16灰阶屏,动态内存的分配一定要大于1M吗?
我用模拟器实测小于1M的动态内存,没有动画效果。大于1M就会有特效。
目前我只能给emwin动态内存40K的大小(单片机的RAM,没加外部RAM),有没有好方法,实现这些移窗、旋转、淡入淡出的特效。


回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-7-15 17:57:29 | 显示全部楼层
风动影动 发表于 2019-7-15 13:33
emWin的手册说明,使用一些图形、窗口动效需要使用存储设备,并且对内存消耗比较大。

如果我的屏幕是128 ...

1MB足够,128*96分辨率,1个像素点使用4bit就可以表示,也就是半个字节,那么总体就是128*96/2就可以表示一帧显存
代码不规范,亲人两行泪!
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-7-16 09:08:54 | 显示全部楼层
missfox 发表于 2019-7-15 17:57
1MB足够,128*96分辨率,1个像素点使用4bit就可以表示,也就是半个字节,那么总体就是128*96/2就可以表示 ...

我没有外扩SRAM,单片机只有48K内存,我给emWin 20k的动态内存。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2019-7-16 11:39:15 | 显示全部楼层
风动影动 发表于 2019-7-16 09:08
我没有外扩SRAM,单片机只有48K内存,我给emWin 20k的动态内存。

唉,那还是放弃动态吧。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 07:36 , Processed in 0.429549 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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