硬汉嵌入式论坛

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

[LVGL] 捣鼓 lvgl + music 发现一个比较诡异的问题就是内存申请释放有时会出现异常 ?

[复制链接]

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
发表于 2024-12-13 20:44:48 | 显示全部楼层 |阅读模式



捣鼓 lvgl + music 发现一个比较诡异的问题就是内存申请释放有时会出现异常 ?

同样的 内存申请, 释放, 放在其他界面 则完全没有任何问题, 但是在 music 界面, 有时进行曲目切换时就会出现 内存申请失败 ?

目前貌似也没有找到具体的原因是什么 ... , 有些悲催呀

内存申请之前都获取内存剩余大小查看时内存剩余控件完全足够, 仿真时发现是内存句柄的控制块大小会出现为 0 , 但是这个控制块为何会出现为目前不得而知, 也不知道他是怎么就出现为 0 的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-14 01:51:34 | 显示全部楼层
帮顶。
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-14 09:08:53 | 显示全部楼层

哈哈哈, 鼎鼎更健康
回复

使用道具 举报

11

主题

106

回帖

144

积分

初级会员

积分
144
发表于 2024-12-16 17:59:04 | 显示全部楼层
楼主是什么平台下发现的。之前我也出现多次用lv_mem_alloc申请小的内存,申请多了就崩溃了。后来改成标准库的malloc就没出现过那个问题。你可以多种动态内存申请方法都试一试。我使用的lvgl8.3
回复

使用道具 举报

95

主题

528

回帖

828

积分

金牌会员

积分
828
发表于 2024-12-17 08:26:49 | 显示全部楼层
我之前使用tlsf的时候出过错。
因为我在free(p)之后还去读p这个指针里面的内容。

按照我原先的设想,free了之后也不会把指针清零,所以指针里的内容应该没变。我就去读取这个指针里的内容,做了一些处理。
但是实际上我发现,tlsf在free了之后,p这个指针的地址就变了。


有群友用过tlsf吗?我遇到一个问题,向大家请教。
https://www.armbbs.cn/forum.php? ... 2&fromuid=32469
(出处: 硬汉嵌入式论坛)
共产主义一定胜利!
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-17 09:20:23 | 显示全部楼层
WALL_E 发表于 2024-12-16 17:59
楼主是什么平台下发现的。之前我也出现多次用lv_mem_alloc申请小的内存,申请多了就崩溃了。后来改成标准库 ...

我使用的是 stm32h7 + lvgl + rtx5

我使用的是 自己的内存管理, 我的 内存管理有好几个,都测试过貌似只要在 music 界面来回申请,释放 几次后就不行了, 但是我的内存申请,释放 同样 的函数放在其他地方都是没有问题的啊,而且内存申请前 我都把内存剩余大小都获取打印出来查看空间都是足够的,

我的内存申请,是否 都增加了 互斥信号量也是不行

我估计看是不是我的 这套通讯机制不符合 lvgl + rtx5 的逻辑造成,现在在想要如何修改 工作机制了呀
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-17 09:22:57 | 显示全部楼层
本帖最后由 hpdell 于 2024-12-17 09:35 编辑
会飞的猪_2020 发表于 2024-12-17 08:26
我之前使用tlsf的时候出过错。
因为我在free(p)之后还去读p这个指针里面的内容。

你说的 这个 tlsf 内存管理我也使用过,效果还是可以, 只是每次申请内存都会增加 4096 byte 的大小, 有些浪费,后来就放弃了

我的内存申请,释放, 都是在一个函数里面统一封装管理,一般不会出现 释放后再去调用的情况的
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-17 10:18:42 | 显示全部楼层
WALL_E 发表于 2024-12-16 17:59
楼主是什么平台下发现的。之前我也出现多次用lv_mem_alloc申请小的内存,申请多了就崩溃了。后来改成标准库 ...

捣鼓了一段时间的 lvgl , 发现也还是蛮好的,唯一的缺点就是每个控件配置的参数太多,还得借助 gui guider 才行,
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2024-12-17 10:43:34 | 显示全部楼层
使用bget内存管理吧,十几年前的代码,稳得一腿
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-17 17:25:33 | 显示全部楼层
shangwudong 发表于 2024-12-17 10:43
使用bget内存管理吧,十几年前的代码,稳得一腿

能不能发出来共享一下啊
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2024-12-17 21:16:49 | 显示全部楼层


初始化:

#define M_BGET_BUFFER_SIZE  1024*3
static uint8_t m_bget_buffer[M_BGET_BUFFER_SIZE];
bpool(m_bget_buffer, M_BGET_BUFFER_SIZE);


申请内存:
bget
释放内存:
brel

bget.zip

22.35 KB, 下载次数: 6

回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-18 12:21:32 | 显示全部楼层
本帖最后由 hpdell 于 2024-12-18 16:27 编辑

感谢感谢啊


回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-18 21:09:44 | 显示全部楼层






你好, 使用你提供的内存管理, 貌似在内存释放有时也会出现错误,提示如下:

brel-2.png


brel-1.png

这说明是什么问题呀 ?
这是 brel 内存释放出现的问题的














回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2024-12-18 21:23:48 | 显示全部楼层
hpdell 发表于 2024-12-18 21:09
你好, 使用你提供的内存管理, 貌似在内存释放有时也会出现错误,提示如下:

多线程访问了么? 我倒是没遇到这种情况,你可以试一试创建个小工程,先测试bget
回复

使用道具 举报

677

主题

3460

回帖

5516

积分

论坛元老

积分
5516
 楼主| 发表于 2024-12-19 09:35:28 | 显示全部楼层
本帖最后由 hpdell 于 2024-12-19 10:15 编辑
shangwudong 发表于 2024-12-18 21:23
多线程访问了么? 我倒是没遇到这种情况,你可以试一试创建个小工程,先测试bget

你提供的内存管理是没有问题的,  我也没有进行多线程访问,

现在有些蒙蔽了呀
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:58 , Processed in 0.341804 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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