一、背景
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
|