如何评估代码占用的RAM和FLASH大小

前言

在项目选型阶段评估RAM和FLASH大小是经常会遇到的问题。今天聊聊如何评估?

第一步:将一个完整的项目拆分成各个模块。

第二步:按照以往项目的经验,统计各个模块需要资源的大小。

例如下面表格:(数据随便写的)

模块

RAM(byte)FLASH(byte)
系统20484096
通讯10242048
充电5121024
总计35847168

有了这个表格在汇报的时候就会显得有理有据。如果想加减某个模块只要简单计算即可知道消耗资源的多少。

如何统计各个模块的资源大小?

每个模块都是由若干个文件组成的。统计每一个文件占有的RAM和FLASH即可知道这个这个模块占有的资源大小。这就要求在写代码时要做好分层和解耦。模块间如果相互耦合统计起来就麻烦了。

介绍一个指令:arm-none-eabi-size

arm-none-eabi-size 是一个用于查看编译后生成的ARM目标代码文件大小的工具,它是 arm-none-eabi-gcc 工具链的一部分,专门用于嵌入式系统开发,尤其是针对不包含操作系统的(bare-metal)ARM Cortex-M系列微控制器。当你使用 arm-none-eabi-gcc 编译完一个程序后,可以使用 arm-none-eabi-size 来检查生成的目标文件、可执行文件或者库文件所占用的内存大小,包括代码段(text)、数据段(data)、BSS段(bss)。

基本用法:

arm-none-eabi-size [选项] 文件名

常用选项:

  • 不带任何选项直接使用,会显示出代码段、数据段和BSS段的大小,以及它们的总和。

  • -t 或 --total:仅显示总大小,不分别列出各段。

  • -A 或 --radix=:指定输出数字的基数,比如 --radix=16 会以十六进制显示大小。

  • -d 或 --debug:显示调试部分的大小。

  • -x 或 --exec-header:对于可执行文件,显示可执行头部的信息。

比如我们要计算a.o这个文件的资源大小可以使用

arm-none-eabi-size a.o

输出结果

text    data     bss     dec     hex filename  
  1024    12     32      1068     42c a.o

如果一个模块有a.o、b.o、c.o 三个文件可以使用下面指令统计资源大小。

arm-none-eabi-size -total *.o

输出结果


text    data     bss     dec     hex filename  
 1024    0       4       1028     404 a.o  
 2048    8      32       2088     828 b.o  
 5120    0       0       5120    1400 c.o  
 ----    ----    ----    ----    ----  
 8192    8      36       8236    2030 total  //上面三个文件的总和

其中RAM大小为data+bss;FlASH大小为text+data 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值