当前位置: 首页 > news >正文

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

目录

  • 一、背景
    • arm-none-eabi-size
  • 二、脚本实现
    • 2.1. 源码
    • 2.2. 效果呈现
  • 三、实现说明
    • 3.1 基本思路
    • 3.2 涉及到的shell 相关知识
      • 3.2.1 sed 实现只打印第二行
      • 3.2.2 cut 截取某一行数据的第n个字段
      • 3.2.3 使用bc 计算器,实现浮点运算

一、背景

arm-gcc 工具链提供了 arm-none-eabi-size 工具查看程序的内存映像,但是这个工具查到的信息可读性不强,如下所示:

$ arm-none-eabi-size -B -d  ./build/app.elftext    data     bss     dec     hex filename213768     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
http://www.lryc.cn/news/225632.html

相关文章:

  • 亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习
  • Java 设计模式——访问者模式
  • Mysql联合查询
  • 响应式婴幼儿早教启蒙网站模板源码
  • ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程
  • react 修改less文件后保存,内存溢出,项目崩溃问题解决
  • Lib文件和netlist的关系,DDC文件和netlist的区别
  • 万宾科技智能井盖,实现对井盖的监测
  • 使用Python从零实现多分类SVM
  • WPF ToggleButton 主题切换动画按钮
  • centerOS下docker 搭建IotDB集群
  • Vue3-Composition-API-学习笔记
  • NSS [HUBUCTF 2022 新生赛]checkin
  • 免费小程序HTTPS证书
  • Linux arm64异常简介和系统调用过程
  • 我遇到的最蠢的bug,竟然是因为这个原因……
  • 【Mysql】查询mysql的版本
  • 广州华锐互动:VR互动实训内容编辑器助力教育创新升级
  • 2023最新版本 从零基础入门C++与QT(学习笔记) -1- C++输入与输出
  • Linux:权限篇 (彻底理清权限逻辑!)
  • classification_report分类报告的含义
  • mysql with 的用法 (含 with recursive)
  • YOLOv8模型ONNX格式INT8量化轻松搞定
  • 揭秘南卡开放式耳机创新黑科技,核心技术剑指用户痛点
  • ChatRule:基于知识图推理的大语言模型逻辑规则挖掘11.10
  • 6.4翻转二叉树(LC226—送分题,前序遍历)
  • 【斗罗二】霍雨浩拿下满分碾压戴华斌,动用家族力量,海神阁会议
  • 通义千问, 文心一言, ChatGLM, GPT-4, Llama2, DevOps 能力评测
  • 一键创建PDF文档,高效管理您的文件资料
  • React在 JSX 中进行条件渲染和循环,并使用条件语句和数组的方法(如 map)来动态生成组件或元素