打印
[新唐博主]

基于arm-gcc 工具链开发mcu程序时,怎么便捷查看内存映像

[复制链接]
1123|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renzheshengui|  楼主 | 2023-11-15 08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、背景
arm-gcc 工具链提供了 arm-none-eabi-size 工具查看程序的内存映像,但是这个工具查到的信息可读性不强,如下所示:

$ arm-none-eabi-size -B -d  ./build/app.elf
   text    data     bss     dec     hex filename
213768     164   57652  271584   424e0 ./build/app.elf


上面呈现出来每个分区的大小,都是一长串数据,我**它能显示每个分区占用了 xx K ,这样我能有一个更直观的印象,而不需要再打开一个计算器去计算。

arm-none-eabi-size
arm-none-eabi-size 的基本使用方法,参照我之前的文章 https://blog.csdn.net/gdut_liujiangyi/article/details/132711069

研究了arm-none-eabi-size 的帮助文档,没找到能实现我需求的参数配置,所以决定自己写一个脚本实现。

二、脚本实现
2.1. 源码
脚本命名为:list_section_size.sh

#!/bin/bash
cmd_get_ram_model="arm-none-eabi-size   -B -d ./build/app.elf"

code_size=$($cmd_get_ram_model|cut -f 1| sed -n '2p')
rw_size=$($cmd_get_ram_model|cut -f 2| sed -n '2p')
zi_size=$($cmd_get_ram_model|cut -f 3| sed -n '2p')
hex_size=$($cmd_get_ram_model|cut -f 4| sed -n '2p')

# echo "flash_szie:"$hex_size
code_size_k=$(echo " scale=2; $code_size/1024 "|bc)
rw_size_k=$(echo " scale=2; $rw_size/1024" |bc)
zi_size_k=$(echo " scale=2; $zi_size/1024 " |bc)
hex_size_k=$(echo " scale=2; $hex_size/1024 " |bc)

echo "code_size:" $code_size "("$code_size_k"K)"
echo "rw_size:" $rw_size "("$rw_size_k"K)"
echo "zi_size:" $zi_size "("$zi_size_k"K)"
echo "hex_size:" $hex_size "("$hex_size_k"K)"




2.2. 效果呈现
$ ./list_section_size.sh
code_size: 213768 (208.75K)
rw_size: 164 (.16K)
zi_size: 57652 (56.30K)
hex_size: 271584 (265.21K)


三、实现说明
3.1 基本思路
arm-none-eabi-size 工具获取到的第二行数据是具体每个分区的大小,分别提前第二行的每个数据,然后将它处于1024,就得到以k 为单位的数据。

3.2 涉及到的shell 相关知识
3.2.1 sed 实现只打印第二行
sed -n '2p'


3.2.2 cut 截取某一行数据的第n个字段
这里不指定分隔符,默认是制表符。-f 指定以分隔符分开的第几个字段。-f1 表示第一个字段,-f2 表示第二个字段。

cut -f 1


3.2.3 使用bc 计算器,实现浮点运算
bc 命令是任意精度计算器语言。这里使用 scale = 2 指定保留两位小数。

echo " scale=2; $rw_size/1024" |bc
————————————————
版权声明:本文为CSDN博主「gdut_llkkyy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gdut_liujiangyi/article/details/134338718

使用特权

评论回复
沙发
tpgf| | 2024-2-1 13:39 | 只看该作者
查看内存映像的目的和用途是什么呢

使用特权

评论回复
板凳
zljiu| | 2024-2-1 14:31 | 只看该作者
在实际操作中 我们如何运行这个脚本呢

使用特权

评论回复
地板
tfqi| | 2024-2-1 18:38 | 只看该作者
通过查看内存映像 可以对程序代码进行相关的优化修改?

使用特权

评论回复
5
gwsan| | 2024-2-1 19:09 | 只看该作者
我们通过观察内存映像 可以对什么进行调整呢

使用特权

评论回复
6
aoyi| | 2024-2-1 19:43 | 只看该作者
怎么才能看明白这个内存映像呢?

使用特权

评论回复
7
nawu| | 2024-2-1 20:17 | 只看该作者
这个 脚本还需要用户进行修改吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

4079

帖子

2

粉丝