完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在STM32F103中使用了RTTHREAD,同时运行多个任务, 然后在任务A中malloc一块内存用于存储字符串数据,使用完成后立刻释放,结果发现释放时有时有发生hard fault问题,定位在r_free函数处。
再通过查看发生错误时的log显示:该数据的内存地址与正在运行任务B地址重叠的,导致释放时就发生了hard fault错误。 问题在于为什么rt_malloc申请的内存地址会与正在运行的任务B重叠? LOG如下:allocate memory at 0x20003eb0 第一次申请了512大小的内存是任务B本身的,第二次就是任务A内的函数申请的。 [02/14 17:17:55.331]allocate memory at 0x20003e2c, size: 132 [02/14 17:17:55.331]malloc size 500 [02/14 17:17:55.331]allocate memory at 0x20003eb0, size: 512 [02/14 17:17:55.331]D/app short thread run... [02/14 17:17:55.956]malloc size 32 [02/14 17:17:55.956]allocate memory at 0x20003eb0, size: 44 [02/14 17:17:55.987]release memory 0x20003eb0, size: 44 [02/14 17:17:55.987]psr: 0x21000000 [02/14 17:17:55.987]r00: 0x20001278 [02/14 17:17:55.987]r01: 0x28029de7 [02/14 17:17:55.987]r02: 0x00002c2c [02/14 17:17:55.987]r03: 0x000063f4 [02/14 17:17:55.987]r04: 0x20003ea4 [02/14 17:17:55.987]r05: 0x20000024 [02/14 17:17:55.987]r06: 0x20000024 [02/14 17:17:55.987]r07: 0xdeadbeef [02/14 17:17:55.987]r08: 0xdeadbeef [02/14 17:17:55.987]r09: 0xdeadbeef [02/14 17:17:55.987]r10: 0xdeadbeef [02/14 17:17:56.034]r11: 0xdeadbeef [02/14 17:17:56.034]r12: 0xfffffffd [02/14 17:17:56.034] lr: 0x08035901 [02/14 17:17:56.035] pc: 0x08034de2 [02/14 17:17:56.036]hard fault on thread: lcd thread |
|
相关推荐
4个回答
|
|
|
|
|
|
重叠倒没有, 写穿是什么意思?
|
|
|
|
要看余下你的源码,是否第一次申请后,马上使用后就释放了,所以第二次申请后等到的内存地址与第一次申请的地址相同了。
|
|
|
|
malloc分配的内存的地方,还有就是有没有存在非法操作
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1259 浏览 0 评论
1429 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6188 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1835 浏览 0 评论
2924 浏览 0 评论
76971 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 17:24 , Processed in 0.544577 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号