当前位置: 首页 > 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

相关文章:

基于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 工具链…...

亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习

亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian曾指出:“数据是应用、流程和商业决策的核心。”如今,客户常用的数据传输模式是建立从Amazon Aurora到Amazon Redshift的数据管道。这些解决方案能够帮助客户获得新的见解&#x…...

Java 设计模式——访问者模式

目录 1.概述2.结构3.案例实现3.1.抽象访问者类3.2.抽象元素类3.3.具体元素类3.4.具体访问者类3.5.对象结构类3.6.测试 4.优缺点5.使用场景6.扩展6.1.分派6.2.动态分配6.3.静态分配6.4.双分派 1.概述 访问者模式 (Visitor Pattern) 是一种行为型设计模式,它用于将数…...

Mysql联合查询

Mysql联合查询 T1表结构(用户名,密码) useridusernamepassword1jackpwd12owenpwd2 T2表结构(用户名,密码) useridjifendengji12033506 第一:内联(inner join) 如果想把用户信息、积分、等…...

响应式婴幼儿早教启蒙网站模板源码

模板信息: 模板编号:6830 模板编码:UTF8 模板颜色:红色 模板分类:学校、教育、培训、科研 适合行业:培训机构类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统&#xf…...

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程

播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT!…...

react 修改less文件后保存,内存溢出,项目崩溃问题解决

一、完整报错 一个很老的react项目,因为没有package-lock.json版本锁,导致拉下来的时候,安装的依赖版本冲突,好不容易启动起来,修改less文件后只要一保存,项目就会崩溃,需要重启,报…...

Lib文件和netlist的关系,DDC文件和netlist的区别

今天来说一说两个基础的概念: 1:综合用的Lib文件和netlist网表的关系 在数字IC设计中,Lib和网表都是非常重要的文件,但它们的作用和用途有很大的区别。 Lib文件,也称为库文件,主要包含单元级的信息&…...

万宾科技智能井盖,实现对井盖的监测

随着人工智能和物联网技术的不断变化,各种适用于市政府提高管理能力和公共服务水平的高科技产品不断更新。在道路基础设施建设过程中,智能井盖传感器的出现时刻保护着城市地下生命线,而且可以对地下水道井盖进行实时的监测并完成数据上传等工…...

使用Python从零实现多分类SVM

前言 本文将首先简要概述支持向量机及其训练和推理方程,然后将其转换为代码以开发支持向量机模型。之后然后将其扩展成多分类的场景,并通过使用Sci-kit Learn测试我们的模型来结束。 SVM概述 支持向量机的目标是拟合获得最大边缘的超平面(两个类中最近…...

WPF ToggleButton 主题切换动画按钮

WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果&#xff0c;大致思路是文章这样&#xff0c;感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…...

centerOS下docker 搭建IotDB集群

一、准备3台机器&#xff0c;IP地址依次为IP1&#xff0c;IP2&#xff0c;IP3&#xff0c;找一个目录下建立文件夹如下&#xff1a; ./data/confignode ./logs/confignode ./data/datanode ./logs/datanode二、在当前目录下建立docker-compose.yml文件&#xff0c;3台都要 1、…...

Vue3-Composition-API-学习笔记

01.Setup函数的体验 App.vue <template><div><h2>当前计数&#xff1a;{{ counter }}</h2><button click"increment">1</button><button click"decrement">-1</button></div> </template>&…...

NSS [HUBUCTF 2022 新生赛]checkin

NSS [HUBUCTF 2022 新生赛]checkin 判断条件是if ($data_unserialize[username]$username&&$data_unserialize[password]$password)&#xff0c;满足则给我们flag。正常思路来说&#xff0c;我们要使序列化传入的username和password等于代码中的两个同名变量&#xff0…...

免费小程序HTTPS证书

随着互联网的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;在小程序的开发和使用过程中&#xff0c;安全问题一直是开发者们关注的重点。其中&#xff0c;HTTPS 证书是保障小程序安全的重要工具之一。在这方面&#xff0c;免费的小程序…...

Linux arm64异常简介和系统调用过程

文章目录 一、异常简介1.1 Exception levels1.2 异常类型 二、系统调用简介2.1 SVC指令2.2 VBAR2.3 系统调用保存现场2.4 系统调用返回 三、Linux 内核分析参考资料 一、异常简介 在ARM64体系架构中&#xff0c;异常是处理器在执行指令时可能遇到的不寻常情况或事件。这些异常…...

我遇到的最蠢的bug,竟然是因为这个原因……

bug的背景 我是一个Python开发者&#xff0c;我最近在做一个数据分析的项目&#xff0c;需要用到pandas库&#xff0c;来处理和分析一些表格数据我的功能需求是&#xff0c;根据用户输入的一些条件&#xff0c;从一个大的数据表中筛选出符合条件的数据&#xff0c;并生成一个新…...

【Mysql】查询mysql的版本

目录 cmd命令查询 mysql -- help(命令&#xff09; mysql -u root -p(命令&#xff09; 数据库管理工具查询 select version(); cmd命令查询 mysql -- help(命令&#xff09; mysql -u root -p(命令&#xff09; 执行该命令并且输入数据库密码 数据库管理工具查询 selec…...

广州华锐互动:VR互动实训内容编辑器助力教育创新升级

随着科技的飞速发展&#xff0c;教育领域也正在经历一场深刻的变革。其中&#xff0c;虚拟现实(VR)技术为教学活动提供了前所未有的便利和可能性。在诸多的VR应用中&#xff0c;VR互动实训内容编辑器无疑是最具潜力和创新性的一种。广州华锐互动开发的这款编辑器以其独特的功能…...

2023最新版本 从零基础入门C++与QT(学习笔记) -1- C++输入与输出

&#x1f38f;说在前面 &#x1f388;我预计是使用两个月的时间玩转C与QT &#x1f388;所以这是一篇学习笔记 &#x1f388;根据学习的效率可能提前完成学习,加油&#xff01;&#xff01;&#xff01; 输入(代码如下方代码块) &#x1f384;分析一下构成 &#x1f388;…...

如何在触发器中获取更新前后的值_NEW与OLD伪记录的访问机制

MySQL和PostgreSQL中OLD/NEW字段需按触发时机&#xff08;BEFORE/AFTER、INSERT/UPDATE/DELETE&#xff09;正确访问&#xff0c;区分大小写且不可跨数据库直接移植&#xff0c;误用会导致报错或性能问题。触发器里怎么拿到 OLD 和 NEW 的字段值mysql 和 postgresql 都支持在行…...

SCTransform vs 传统方法:单细胞亚群分析中的标准化选择与性能对比

SCTransform vs 传统方法&#xff1a;单细胞亚群分析中的标准化选择与性能对比 单细胞RNA测序技术正在重塑我们对复杂生物系统的理解能力。在这个数据密集的领域里&#xff0c;如何正确处理和标准化原始计数数据&#xff0c;成为决定下游分析可靠性的关键第一步。Seurat工具包作…...

逆向YouTube Shorts接口:我是如何用Java和Protobuf搞定短视频列表解析的

逆向解析YouTube Shorts接口&#xff1a;Java与Protobuf实战指南 在移动应用逆向工程领域&#xff0c;Google系产品的接口分析向来以高复杂度著称。本文将分享如何突破层层技术障碍&#xff0c;从零开始解析YouTube Shorts短视频列表接口的全过程。不同于常见的API调用教程&…...

深入open62541 PubSub:手把手教你用UDP组播实现无代理(Broker-less)数据分发

深入open62541 PubSub&#xff1a;UDP组播实现无代理数据分发的实战解析 在工业物联网和分布式系统中&#xff0c;实时数据分发一直是架构设计的核心挑战。传统基于代理的发布/订阅模式虽然成熟可靠&#xff0c;但在某些对延迟敏感、要求极致轻量级的场景中&#xff0c;无代理(…...

告别原生局限:手把手教你为QML应用注入KDDockWidgets窗口停靠能力(Windows/Mac双平台配置指南)

突破QML窗口管理瓶颈&#xff1a;KDDockWidgets跨平台整合实战 在构建现代化桌面应用时&#xff0c;窗口停靠系统是提升用户体验的关键组件。然而Qt框架长期存在一个明显的功能缺口——官方QML模块缺乏原生的DockWidget支持。这种局限性迫使开发者要么接受功能残缺&#xff0c;…...

Ollama/vLLM/llama.cpp实测

Ollama 每月有 5200 万次下载。它是每个教程都推荐的工具。我用了它六个月&#xff0c;认为它已经"生产就绪"&#xff0c;并将其部署给了 40 名内部用户。响应时间从 3 秒变成了超过一分钟。请求开始超时。模型没问题。是 Ollama 的问题。 那次事故让我深入研究&…...

不止是‘网络中心’:拆解中科院CNIC那些你可能不知道的硬核部门(大数据/AI/安全)

中科院CNIC技术部门全景&#xff1a;从大数据到网络安全的硬核实战指南 推开中科院计算机网络信息中心&#xff08;CNIC&#xff09;那扇看似普通的玻璃门&#xff0c;你会发现这里远不止是传统认知中的"网络中心"。在这个被简称为"网络中心"的机构里&…...

Fish Speech 1.5企业实操:为内部知识库添加多语种语音检索功能

Fish Speech 1.5企业实操&#xff1a;为内部知识库添加多语种语音检索功能 1. 引言&#xff1a;当知识库会“说话” 想象一下&#xff0c;你的团队里有一位精通十几种语言的同事&#xff0c;他能把任何文档、报告、代码注释&#xff0c;用清晰、自然的语音读出来。无论是中文…...

别再被EMI困扰了!手把手教你理解并配置PCIE/SATA/USB3.0的SSC扩频时钟

高速接口EMI实战指南&#xff1a;SSC扩频时钟配置与参数优化 在硬件工程师的日常工作中&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题就像一位不请自来的"隐形访客"&#xff0c;总是在产品认证测试的关键时刻突然出现。特别是面对PCIE、SATA、USB3.0这类高速…...

英雄联盟助手终极指南:如何一键获取最优出装与符文配置

英雄联盟助手终极指南&#xff1a;如何一键获取最优出装与符文配置 【免费下载链接】champr &#x1f436; Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champr 还在为每次游戏前手动配置出装和符文而烦恼吗&#xff1f;ChampR是…...