硬汉嵌入式论坛

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

[TouchGFX] GFX中使用上千个widget, 会静态占用大量内存吗?

[复制链接]

26

主题

70

回帖

148

积分

初级会员

积分
148
发表于 2022-4-7 16:41:30 | 显示全部楼层 |阅读模式
由于开发需求, TouchGfx上一个Screen里面就包含几百个Widget (Image / Button / Container / Shape / Progress / Miscellaneous),
几个Screen下来Widget累计上千, 每个Widget对象都有一系列相关属性, 我看代码这部分应该是静态占用的,
那样不得占用巨量RAM资源了???

H750的Dtcm也就128KB, 这样看是扛不住那么多个Widget的消耗, 那是不是就得在Sdram里面开辟空间存放了, 求教硬汉哥这方法可行吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-4-7 19:20:14 | 显示全部楼层
几百个控件没多少资源。每个Screen动态创建就好了。另外H750有1MB的RAM空间的
回复

使用道具 举报

11

主题

122

回帖

160

积分

初级会员

积分
160
发表于 2022-4-7 19:25:06 | 显示全部楼层
touchgfx控件占用内存还是比较小的,几百个还是撑的住的。touchgfx是以screen为显示单位,除非使用容器组合成到一个screen里,比如SwipeContainer,那占用内存就比较大了。如果控件确实很多,那确实要另外开辟空间了,touchgfx控件内存使用的是C++的new placement方式,把这个内存分配到sdram里就可以了。
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2022-4-8 08:10:03 | 显示全部楼层
eric2013 发表于 2022-4-7 19:20
几百个控件没多少资源。每个Screen动态创建就好了。另外H750有1MB的RAM空间的

TouchGfx默认在Base.hpp里面声明widget, 在Base.cpp里面做初始化.

你所说的动态创建是screen创建的时候, 在堆里面动态申请内存空间存放widget, 在screen关闭时候释放吗?
我没有跑系统, 而且感觉这样动态内存的申请在反复的申请和释放后会产生不少内存碎片, 不做管理的话内存空间会越来越少.


回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2022-4-8 08:14:14 | 显示全部楼层
有梦为马 发表于 2022-4-7 19:25
touchgfx控件占用内存还是比较小的,几百个还是撑的住的。touchgfx是以screen为显示单位,除非使用容器组合 ...

整个项目全做完肯定过千个部件, 而且还用了好多custom container, 内存不足是早晚的事, 必须得准备个方案应对.
数据从dtcm改放至sdram里面, 估计速度会慢很多.
回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2022-4-8 10:46:49 | 显示全部楼层
想这么多那就linux
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2022-4-8 11:12:19 | 显示全部楼层
        // Memory Malloc
        if (NULL != pimgModel)
        {   // Memory Free
            remove(*pimgModel);
            delete pimgModel;
        }
        else{}
        pimgModel = new touchgfx::Image;
        DebugPrintf("0x%.8x\n", (uint32_t)pimgModel);
        pimgModel->setXY(0, 0);
        pimgModel->setVisible(true);
        add(*pimgModel);
目前在handleTickEvent()函数里面每秒进行上述动作, 单个widget的动态申请和释放, 内存池运行正常也不产生碎片.

打算在每个screen里面进来就申请其所需的全部widget空间, screen退出时候释放全部, 按上述测试推算这样也不会有内存碎片产生.
大家有没有什么更好的Idea呢?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 05:36 , Processed in 0.213182 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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