【发布时间】:2017-05-01 16:39:31
【问题描述】:
我正在做一个 IOT 项目,我正在使用 Atmel SAMD21J18A 芯片将数据发送到远程服务器。我想包含一个功能,我可以在运行时发送使用过的闪存和剩余的闪存大小。有没有保存这些数据的寄存器?我查看了数据表,但找不到答案。
【问题讨论】:
-
不是寄存器可以保存的东西,通常闪存消耗由工具链定义,二进制文件有多大,因此您可以使用链接器脚本获取二进制文件的整体大小,四舍五入到该部分的闪存擦除块大小,并且应该能够检测到该部分或编译该部分以知道该部分有多少闪存,减去这就是空闲的。
-
或采取另一种方法,从顶部开始检查内存,直到找到数据,然后向上舍入到闪存擦除边界。
-
没有使用和空闲的闪存,它一直都在使用,数据可能是擦除值但它是一个值它是每个位两种状态(一个或零) 不是三个(一、零、免费)。
-
@old_timer 非常感谢。 RAM使用情况如何?有没有办法确定?
-
除了堆栈是的,假设你不使用 malloc,我真的希望你不要。如果您保持某种传统(仅使用静态分配的变量,而不要只是徘徊在 ram 中),那么您可以在编译时告诉您使用 .data 和 .bss 使用了多少 ram。但是堆栈是动态的,您需要进行分析,无论如何您都应该这样做以确保。如果没有别的,你会使用 valgrind 类型的方法,但这会添加使用资源并且不是 100% 的代码,因为它没有涵盖所有可能的路径。
标签: embedded microcontroller iot atmel atmelstudio