硬汉嵌入式论坛

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

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2023-4-30 00:46:49 | 显示全部楼层 |阅读模式
这个功能也非常实用,以MDK为例,他的stack和heap经过__main都会初始化为0, 所以可以用来检测最大实用情况。

【系统栈监测】

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

系统栈大小是需要手动添加的:
[C] 纯文本查看 复制代码
local Stack_Size = 0x00001000     -- 根据工程里面配置,手动填写栈大小


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

12.png


实现代码:

[Lua] 纯文本查看 复制代码
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))


效果如下:

1.png

【堆监测】

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

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


测试的C代码:
[C] 纯文本查看 复制代码
        p = malloc(100);
        p1 = malloc(300);
        
        for(i=0; i<100; i++)
        {
                p[i] = 0x55;
        }


LUA代码:

[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


效果如下:
12.png






评分

参与人数 1金币 +20 收起 理由
missfox + 20 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2023-5-2 00:17:28 | 显示全部楼层
耽误了一天弄周报,周报发布后更新下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2023-5-3 02:27:28 | 显示全部楼层
栈使用情况可以监测了

下载 (1).png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2023-5-3 09:53:34 | 显示全部楼层
更新完成
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2023-5-4 18:14:14 | 显示全部楼层
malloc的使用不要检索吧,毕竟是动态的分配,没有明显的标志,最主要是不知道MDK的malloc源码链表关联方式。
代码不规范,亲人两行泪!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2023-5-5 00:36:45 | 显示全部楼层
missfox 发表于 2023-5-4 18:14
malloc的使用不要检索吧,毕竟是动态的分配,没有明显的标志,最主要是不知道MDK的malloc源码链表关联方式 ...

malloc没有源码,不好检索。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 17:41 , Processed in 0.176606 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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