eric2013 发表于 2023-4-30 00:46:49

H7-TOOL检索程序系统stack和heap使用情况,方便大家使用了malloc和中断嵌套情况的监测(2023-05-03)

这个功能也非常实用,以MDK为例,他的stack和heap经过__main都会初始化为0, 所以可以用来检测最大实用情况。

【系统栈监测】

设置系统栈大小和系统栈首地址

系统栈大小是需要手动添加的:
local Stack_Size = 0x00001000   -- 根据工程里面配置,手动填写栈大小

设置栈首地址,可以看map文件,也可以TOOL上位机Trace解析,获取并填写栈首地址,以MDK为例,对应的是__initial_sp




实现代码:

local ok
local bytes
local off
local Stack_Size = 0x00001000   -- 根据工程里面配置,手动填写栈大小
local __initial_sp = 0x2000b9d0   -- 可以看map文件,也可以TOOL上位机Trace解析,获取并填写栈首地址

beep()
pg_init() -- 初始化SWD接口函数

ok,bytes = pg_read_mem(__initial_sp - Stack_Size + 1, Stack_Size) -- M内核栈空间是向下生长的满栈
if(ok == 1) then
      for i=1,Stack_Size,1 do
                if(string.sub(bytes,i,i) ~= '\0') then      -- 遇到非0,停止监测
                        off = i
                        break
                end
      end
else
      print("读取stack空间失败")
end
   
print(string.format("当前系统栈最大使用情况 = %4.1f%%\r\n", (1 - off/Stack_Size)*100))


效果如下:



【堆监测】

堆监测不太好实现,我们这里将其全部内容打印出了:

手动填写堆大小和堆首地址__heap_base
local Heap_Size = 0x0000800               -- 根据工程里面配置,手动填写栈大小
local __heap_base =0x2000a1d0             -- 可以看map文件,也可以TOOL上位机Trace解析,获取并填写堆首地址

测试的C代码:
      p = malloc(100);
      p1 = malloc(300);
      
      for(i=0; i<100; i++)
      {
                p = 0x55;
      }

LUA代码:

local ok
local bytes
local off
local Heap_Size = 0x0000800               -- 根据工程里面配置,手动填写栈大小
local __heap_base =0x2000a1d0             -- 可以看map文件,也可以TOOL上位机Trace解析,获取并填写堆首地址

beep()
pg_init() -- 初始化SWD接口函数

ok,bytes = pg_read_mem(__heap_base, Heap_Size) -- M内核堆空间是向上生长
if(ok == 1) then
      print_hex(bytes)
else
      print("读取heap空间失败")
end

效果如下:







eric2013 发表于 2023-5-2 00:17:28

耽误了一天弄周报,周报发布后更新下

eric2013 发表于 2023-5-3 02:27:28

栈使用情况可以监测了


eric2013 发表于 2023-5-3 09:53:34

更新完成

missfox 发表于 2023-5-4 18:14:14

malloc的使用不要检索吧,毕竟是动态的分配,没有明显的标志,最主要是不知道MDK的malloc源码链表关联方式。

eric2013 发表于 2023-5-5 00:36:45

missfox 发表于 2023-5-4 18:14
malloc的使用不要检索吧,毕竟是动态的分配,没有明显的标志,最主要是不知道MDK的malloc源码链表关联方式 ...

malloc没有源码,不好检索。
页: [1]
查看完整版本: H7-TOOL检索程序系统stack和heap使用情况,方便大家使用了malloc和中断嵌套情况的监测(2023-05-03)