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
相关产品推荐
相关产品推荐

