你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H7系列RMII用于TCP/IP 服务器

[复制链接]
zqg_st_yu 提问时间:2025-4-15 11:41 / 已解决
软件运行一段时间后,出现double free,随后进入到硬件错误中断。

检查过内存释放模块,这些都正常

堆内存开辟了128K

传输数据量大概为10Mbps
收藏 评论7 发布时间:2025-4-15 11:41

举报

7个回答
zqg_st_yu 回答时间:2025-4-15 11:42:27

double free的随机出现的

xmshao 回答时间:2025-4-15 13:55:01
从double free提示来看, 明显跟内存操作有关,问题很可能是由于重复释放同一块内存导致的。


你可能要仔细检查内存分配和释放操作的地方。

建议在释放内存之后,将指针设置为 NULL;在释放内存之前,检查指针是否为 NULL。如果指针为 NULL,则不进行释放操作,避免重复释放。


另外,这里有本社区另一个贴子,它也是发生了重复free操作后导致异常。


程序卡死在vPortFree函数中
zqg_st_yu 回答时间:2025-4-17 11:11:59

xmshao 发表于 2025-4-15 13:55
从double free提示来看, 明显跟内存操作有关,问题很可能是由于重复释放同一块内存导致的。</p>
<p>

好像问题解决了,在测试当中

xmshao 回答时间:2025-4-18 09:11:08

zqg_st_yu 发表于 2025-4-17 11:11
好像问题解决了,在测试当中

👍 🎉️

zqg_st_yu 回答时间:2025-4-18 14:46:50

问题来源:


如果你跟一样是查看的正点原子的TCP/IP 服务器的例程,例程当中有个非常隐蔽的BUG
在TCP发送数据时,需要pbuf_allo分配发送的内存,例程当中如下:
错误创建:pbuf_alloc(PBUF_TRANSPORT, 200, PBUF_POOL);
正确创建:pbuf_alloc(PBUF_TRANSPORT, 200, PBUF_RAM);

PBUF_POOL 与 PBUF_RAM 分别有不同的描述:
PBUF_POOL:
从预分配的内存池中快速分配
适合高吞吐量、实时性要求高的场景
推荐用于接收数据包(因为以太网接收是异步中断触发的)

PBUF_RAM:
从堆内存动态分配
适合发送数据包(因为发送通常是应用主动控制的)
当PBUF_POOL耗尽时作为备用
需要更大的堆空间配置
zqg_st_yu 回答时间:2025-4-18 14:48:25

因此当你将发送的缓存创建在缓存池当中,就会占用接收的线程池资源,导致资源不足,或者出现双重释放的问题。

xmshao 回答时间:2025-4-18 17:07:57

zqg_st_yu 发表于 2025-4-18 14:46
问题来源:</p>
<pre><code>

[md]👍 🎉️
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版