【问题标题】:Minimizing RAM usage of a microcontroller最小化微控制器的 RAM 使用
【发布时间】:2021-01-22 11:54:37
【问题描述】:

我目前正在对微控制器进行编程。 RAM 大小为 4kb。它应该做什么:它应该睡 10 分钟,醒来,测量温度,存储这个温度,然后再次进入睡眠状态。这应该以 10 分钟的间隔完成。设备必须能够将数据存储 90 天。

因此,虽然我的设备到目前为止一切正常,但我正在努力解决的问题是数据的存储。我初始化一个一定大小的数组,然后将测量结果依次存储到数组中。测量结果是一个短整数。要点是间隔 10 分钟,我设法拥有一个大小为 1850 的数组,而(据我所见)它的大小必须为 13960。

我也许可以将间隔扩大到 15 分钟,但即使这样也无法让我接近。有没有其他方法可以减少我看不到的所需 RAM?

【问题讨论】:

标签: c embedded storage microcontroller ram


【解决方案1】:

我会使用一些 0.5 美元的 I2C EEPROM,例如 M24256-DFDW6TP。即使将“死虫”焊接到实际电路板上也很容易,并且具有 32kB 的 EEPROM。超过你的需要。

https://uk.farnell.com/stmicroelectronics/m24256-dfdw6tp/eeprom-256kbit-40-to-85deg-c/dp/3214579

【讨论】:

  • 虽然建议不错,但我认为这不是一个真正有效的答案。
  • @Devolus 这是一个可行的解决方案。其他一切都是一种解决方法,而不是对实际问题进行排序。
  • @0___________ 由于项目原因,我仅限于给定的微控制器。
  • 我没说你需要换uC
【解决方案2】:

鉴于您的限制,了解您的总可用内存至关重要:

SRAM (4 KB)

请记住,您的程序将使用此内存的很大一部分来运行您的代码(更多 here)。
您可以测量您的 SRAM 使用量以了解多少
如果可能,请不要使用堆(当然也不要使用动态分配)

FRAM (2 KB)

这是您的代码被编程的地方,您的代码未使用的每个字节都是用于数据存储的可用空间。
您可以测量您的 SRAM 使用量以了解多少

应用程序 ROM (7KB)

不幸的是,这个内存是为函数库保留的。也许可以覆盖 TI 的代码以放置自己的代码以获得空间。除非你是老手,否则我强烈建议不要这样做

现在怎么办

假设您使用了两个内存的 1/4,实际上 4KB 的可用内存位于 SRAM 和 FRAM(链接描述文件部分)

通过一些数学运算,您可以获得 90 天的 12960 个数据收集,这是无法存储的

两种解决方案

  • 添加一个外部 EEPROM,如 @0_______________ 回答
  • 压缩您的数据,例如,每 7 天,您可以读取过去一周的温度并用矢量对其进行四舍五入,然后存储该矢量值并开始下一周的采集。此解决方案建议数据丢失率高

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多