嵌入式技术论坛
直播中

fanB

9年用户 1543经验值
擅长:20615
私信 关注
[问答]

用memtrace_heap命令查看堆状态时出错是什么原因造成的

我板子的主芯片是STM32F427VI,外面挂了一块儿1MB的PSRAM。
在系统中使用了MEMHAEP来管理所有的内存,包括内部RAM,CCMRAM和PSRAM。

在用memtrace_heap命令查看堆的状态时,发现内部RAM的堆空间有错误,出现了incorrcet magic,具体如下:

msh />memtrace_heap
memory heap address:
heap_ptr: 0x60000000
free : 0x000fffc8
max_used: 0x00000038
size : 0x00100000
--memory used information --
[0x60000000 - 1048520 - ] free
memory heap address:
heap_ptr: 0x10000000
free : 0x0000ffc8
max_used: 0x00000038
size : 0x00010000
--memory used information --
[0x10000000 - 65480 - ] free
memory heap address:
heap_ptr: 0x2000f7e4
free : 0x00011b80
max_used: 0x0000f6b0
size : 0x0002081c
--memory used information --
[0x2000f7e4 - 20 - NONE] used
[0x2000f814 - 2560 - NONE] used
[0x20010230 - 576 - NONE] used
[0x2001048c - 144 - NONE] used
[0x20010538 - 2048 - NONE] used
[0x20010d54 - 144 - main] used
[0x20010e00 - 2048 - main] used
[0x2001161c - 56 - main] used
[0x20011670 - 32 - main] used
[0x200116ac - 44 - main] used
[0x200116f4 - 144 - main] used
[0x200117a0 - 4096 - main] used
[0x200127bc - 64 - main] used
[0x20012818 - 144 - main] used
[0x200128c4 - 2048 - main] used
[0x200130e0 - 12 - main] used
[0x20013108 - 16 - main] used
[0x20013134 - 428 - main] used
[0x200132fc - 16 - main] used
[0x20013328 - 36 - main] used
[0x20013368 - 12 - ] free
[0x20013390 - 12 - main] used
[0x200133b8 - 76 - main] used
[0x20013420 - 12 - ] free
[0x20013448 - 12 - main] used
[0x20013470 - 12 - main] used
[0x20013498 - 12 - main] used
[0x200134c0 - 1788 - main] used
[0x20013bd8 - 104 - main] used
[0x20013c5c - 12 - main] used
[0x20013c84 - 152 - main] used
[0x20013d38 - 116 - main] used
[0x20013dc8 - 12 - main] used
[0x20013df0 - 12 - main] used
[0x20013e18 - 532 - main] used
[0x20014048 - 144 - main] used
[0x200140f4 - 4096 - main] used
[0x20015110 - 76 - main] used
[0x20015178 - 12 - main] used
[0x200151a0 - 76 - main] used
[0x20015208 - 144 - main] used
[0x200152b4 - 1280 - main] used
[0x200157d0 - 16 - main] used
[0x200157fc - 12 - main] used
[0x20015824 - 12 - main] used
[0x2001584c - 24 - main] used
[0x20015880 - 104 - main] used
[0x20015904 - 104 - main] used
[0x20015988 - 12 - main] used
[0x200159b0 - 4156 - main] used
[0x20016a08 - 44 - main] used
[0x20016a50 - 12 - main] used
[0x20016a78 - 4156 - main] used
[0x20017ad0 - 44 - main] used
[0x20017b18 - 104 - main] used
[0x20017b9c - 12 - main] used
[0x20017bc4 - 104 - main] used
[0x20017c48 - 12 - main] used
[0x20017c70 - 144 - main] used
[0x20017d1c - 2048 - main] used
[0x20018538 - 76 - main] used
[0x200185a0 - 36 - ulog] used
[0x200185e0 - 24 - ] free
[0x20018614 - 16 - ulog] used
[0x20018640 - 144 - main] used
[0x200186ec - 508 - ] free
[0x20018904 - 40 - main] used
[0x20018948 - 52 - main] used
[0x20018998 - 76 - main] used
[0x20018a00 - 4140 - ulog] used
[0x20019a48 - 512 - ] free
[0x20019c64 - 40 - main] used
[0x20019ca8 - 52 - main] used
[0x20019cf8 - 76 - main] used
[0x20019d60 - 40 - main] used
[0x20019da4 - 52 - main] used
[0x20019df4 - 2048 - main] used
[0x2001a610 - 4584 - ] free
[0x2001b814 - 420 - main] used
[0x2001b9d4 - 40 - main] used
[0x2001ba18 - 12 - main] used
[0x2001ba40 - 12 - main] used
[0x2001ba68 - 12 - main] used
[0x2001ba90 - 12 - main] used
[0x2001bab8 - 44 - main] used
[0x2001bb00 - 84 - main] used
[0x2001bb70 - 28 - main] used
[0x2001bba8 - 12 - main] used
[0x2001bbd0 - 12 - main] used
[0x2001bbf8 - 12 - main] used
[0x2001bc20 - 12 - main] used
[0x2001bc48 - 12 - main] used
[0x2001bc70 - 12 - main] used
[0x2001bc98 - 12 - main] used
[0x2001bcc0 - 12 - main] used
[0x2001bce8 - 12 - main] used
[0x2001bd10 - 12 - main] used
[0x2001bd38 - 144 - main] used
[0x2001bde4 - 6144 - main] used
[0x2001d600 - 144 - main] used
[0x2001d6ac - 2048 - main] used
[0x2001dec8 - 144 - main] used
[0x2001df74 - 2048 - main] used
[0x2001e790 - 36 - cfg_] used
[0x2001e7d0 - 28 - cfg_] used
[0x2001e808 - 56 - cfg_] used
[0x2001e85c - 40 - cfg_] used
[0x2001e8a0 - 40 - cfg_] used
[0x2001e8e4 - 252 - ] free
[0x2001e9fc - 40 - cfg_] used
[0x2001ea40 - 52 - cfg_] used
[0x2001ea90 - 144 - cfg_] used
[0x2001eb3c - 4096 - cfg_] used
[0x2001fb58 - 1424 - ] free
[0x20020104 - incorrect magic: 0x2001210c

请问这可能是什么原因造成的?

回帖(1)

王萍

2022-9-2 11:23:45
每次都在固定的位置吗?如果是的话,可以下个写断点。
如果不固定,可能写个检查的代码,放到线程切换的hook里面,看看是从哪个线程到哪个线程出现的问题。
确定线程后,再把这个hook取消,把检查放到线程中代码的不同位置,这样可以逐步缩小范围。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分