You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM 32位单片机自定义存储区已用容量统计方法咨询

ARM 32位单片机Flash持久化存储占用统计需求

我在ARM 32位单片机上开发应用,使用内部Flash的一部分存储持久化数据,已在链接脚本中添加如下配置:

MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 20K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 63K
  STORAGE_FLASH (rx) : ORIGIN =  ORIGIN(FLASH) + LENGTH(FLASH), LENGTH = 1K
}
SECTIONS
{
  ._customStorage :
  {
    _sCustomStorage = .;
    . = ALIGN(4);
    KEEP(*(._customStorage))
    . = ALIGN(4);
    _eCustomStorage = .;
  } >STORAGE_FLASH
}

需求说明

主程序通过调用writeFlash函数向Flash写入数据,传入地址等参数。我需要统计该函数以不同常量地址调用的次数,以此估算内存占用量;若能结合地址与写入大小计算则更佳,但多数写操作是16位,此功能非必需。

当前手动估算方案

目前我采用手动定义占位数组的方式估算,代码如下:

#define OCCUPIED_SIZE 50
const uint8_t __attribute__((section ("._customStorage"))) ___occupiedMemory[OCCUPIED_SIZE];

示例代码与期望结果

例如以下代码:

bool writeFlash(uint32_t address,uint8_t* data,uint16_t size);
int main(){
   uint8_t value = 0;
   uint8_t array[50] = {};
   bool flag; // 未初始化,值由运行时决定
   writeFlash(12,&value,1);
   writeFlash(34,&array,7);
   writeFlash(34,&array,10);
   if(flag){
       writeFlash(67,&array,10);
   }
}

针对上述代码,我期望链接器能报告已使用24字节(包含ALIGN带来的3字节额外占用)。

内容的提问来源于stack exchange,提问作者Dioswison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:47:18