最小化微控制器的 RAM 使用
Minimizing RAM usage of a microcontroller
我目前正在对微控制器进行编程。 RAM 大小为 4kb。它应该做什么:它应该睡 10 分钟,醒来,测量温度,存储这个温度,然后再次入睡。这应该在 10 分钟的间隔内完成。设备必须能够存储数据 90 天。
因此,虽然我的设备到目前为止一切正常,但我正在努力解决的问题是数据的存储。我初始化一个一定大小的数组,然后将测量结果依次存储到数组中。测量结果是一个 short int。点是间隔 10 分钟我设法有一个大小为 1850 的数组,而(据我所知)它的大小必须为 13960.
我也许可以将间隔延长到 15 分钟,但即使这样也无法接近。还有其他方法可以减少我看不到的所需 RAM 吗?
我会使用一些 0.5 美元的 I2C EEPROM,例如 M24256-DFDW6TP。甚至可以很容易地将“死虫”焊接到实际电路板上,并且具有 32kB 的 EEPROM。比你需要的更多。
https://uk.farnell.com/stmicroelectronics/m24256-dfdw6tp/eeprom-256kbit-40-to-85deg-c/dp/3214579
鉴于您的限制,了解您的可用内存总量至关重要:
SRAM (4 KB)
请记住,您的程序将使用此内存的很大一部分来 运行 您的代码(更多 here)。
您可以测量您的 SRAM 使用量以了解多少
如果可能,不要使用堆(当然不要使用动态分配)
FRAM (2 KB)
这是您的代码编程的地方,您的代码未使用的每个字节都是免费的 space 用于您的数据存储。
您可以测量您的 SRAM 使用量以了解多少
应用程序 ROM (7KB)
不幸的是,这块内存是为函数库预留的。也许可以覆盖 TI 的代码以放入您自己的代码以获得 space。除非你是老手,否则强烈反对
现在怎么办
假设您使用了两个内存的 1/4,实际上有 4KB 可用内存,位于 SRAM 和 FRAM(链接描述文件部分)
通过一些数学运算,您可以收集 90 天的 12960 个数据,这是无法存储的
两种解决方案
- 添加一个外部 EEPROM,如@0___________ answer
- 压缩您的数据,例如,每 7 天,您可以读取过去一周的温度并将其用矢量四舍五入,然后存储此矢量值并开始下一周的采集。此解决方案建议大量数据丢失
我目前正在对微控制器进行编程。 RAM 大小为 4kb。它应该做什么:它应该睡 10 分钟,醒来,测量温度,存储这个温度,然后再次入睡。这应该在 10 分钟的间隔内完成。设备必须能够存储数据 90 天。
因此,虽然我的设备到目前为止一切正常,但我正在努力解决的问题是数据的存储。我初始化一个一定大小的数组,然后将测量结果依次存储到数组中。测量结果是一个 short int。点是间隔 10 分钟我设法有一个大小为 1850 的数组,而(据我所知)它的大小必须为 13960.
我也许可以将间隔延长到 15 分钟,但即使这样也无法接近。还有其他方法可以减少我看不到的所需 RAM 吗?
我会使用一些 0.5 美元的 I2C EEPROM,例如 M24256-DFDW6TP。甚至可以很容易地将“死虫”焊接到实际电路板上,并且具有 32kB 的 EEPROM。比你需要的更多。
https://uk.farnell.com/stmicroelectronics/m24256-dfdw6tp/eeprom-256kbit-40-to-85deg-c/dp/3214579
鉴于您的限制,了解您的可用内存总量至关重要:
SRAM (4 KB)
请记住,您的程序将使用此内存的很大一部分来 运行 您的代码(更多 here)。
您可以测量您的 SRAM 使用量以了解多少
如果可能,不要使用堆(当然不要使用动态分配)
FRAM (2 KB)
这是您的代码编程的地方,您的代码未使用的每个字节都是免费的 space 用于您的数据存储。
您可以测量您的 SRAM 使用量以了解多少
应用程序 ROM (7KB)
不幸的是,这块内存是为函数库预留的。也许可以覆盖 TI 的代码以放入您自己的代码以获得 space。除非你是老手,否则强烈反对
现在怎么办
假设您使用了两个内存的 1/4,实际上有 4KB 可用内存,位于 SRAM 和 FRAM(链接描述文件部分)
通过一些数学运算,您可以收集 90 天的 12960 个数据,这是无法存储的
两种解决方案
- 添加一个外部 EEPROM,如@0___________ answer
- 压缩您的数据,例如,每 7 天,您可以读取过去一周的温度并将其用矢量四舍五入,然后存储此矢量值并开始下一周的采集。此解决方案建议大量数据丢失