硬汉嵌入式论坛

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

有群友用过tlsf吗?我遇到一个问题,向大家请教。

[复制链接]

97

主题

537

回帖

843

积分

金牌会员

积分
843
发表于 2024-9-15 16:28:18 | 显示全部楼层 |阅读模式
本帖最后由 会飞的猪_2020 于 2024-9-15 16:37 编辑

不知道是不是我使用姿势的问题,调用tlsf的free函数会有可能改变我内存里的数据?


我的业务逻辑的代码如下,是一个半双工总线的驱动,如果设置了random_ms这个函数,就会根据这个函数来计算随机延时。
否则的话就根据重发次数按照200ms*重发次数来重发数据。
Snipaste_2024-09-15_16-08-47.png

然后我在使用的时候发现偶尔会卡死,进入硬件错误。我每秒发3条数据,发个几分钟就可能会出现一次卡死的情况。
在经过检查之后,发现问题出在167行这里。
我从来没有设置过这个函数的,就是说理论上这个函数里面应该是进不来的。但是莫名其妙就进来了。而且前面发送的数据是正确的。


于是我在前后都加上了打印,我的工程是裸机。
Snipaste_2024-09-15_16-07-55.png
我们可以看到,出现问题的时候是在调用free之后,node->random_ms的地址就变了。
这个free是我移植tlsf的,我没有使用c库的malloc。
我把tlsf去掉之后,暂时就不会卡死了..


仔细想想我的写法是有问题的。应该在释放node之后,不应该再去使用node->random_ms了。
把释放的代码放在最后才对。
不过这个free会改变内存有点超出我的认识,在我印象里free应该是不会改变内存的才对。

可能是这个的实现方式不一样,或者是我的使用方法有问题。。
共产主义一定胜利!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-9-16 01:51:40 | 显示全部楼层
帮顶下,没用过tlsf

lvgl好像是用的这个动态内存管理
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2024-9-29 13:23:54 | 显示全部楼层
本帖最后由 会飞的猪_2020 于 2024-9-29 13:27 编辑

如果lvgl用的tlsf的话,那这个库应该是没问题的。。

就是我的代码写的有问题。

共产主义一定胜利!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 19:25 , Processed in 0.235944 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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