This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2650:如何安全地从 SRAM 中获取最多的存储器、而不会与堆栈发生冲突。

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/597049/rtos-cc2650-how-to-safely-get-the-most-memory-out-of-sram-without-conflicting-with-the-stack

器件型号:CC2650

工具/软件:TI-RTOS

您好!

我正在尝试利用 SRAM 存储器来实现缓冲存储器分配的最大堆大小。 我想存储来自光传感器和加速计的数据、并将其存储在堆中的缓冲区中、直到达到最大大小、然后完全写入 SD 卡。 我希望尽量减少写入 SD 卡的频率、因为写入 SD 卡需要很大的功率。 我想知道如果我增加.cmd 文件中的 SRAM 大小、我还需要更改闪存大小、以便我不会发生冲突、并且能够稳定可靠地访问存储器。 我想在堆中分配内存、并在程序运行时静态保留该位置供程序使用。

在当前的.cmd 中、我具有:

#define FLASH_base 0x0
#define FLASH_SIZE 0x20000
#define RAM_base 0x20000000
#define RAM_SIZE 0x5000

如果我更改:

#define FLASH_base 0x0
#define FLASH_SIZE 0x20000 <-???? 更新???
#define RAM_base 0x20000000
#define RAM_SIZE 0x10000 <--增加2倍

我应该如何更改 FLASH_SIZE?

在存储器映射中、似乎 SRAM 被划分为多个块、这些块是如何划分的? 我可以同时(连续)访问它们、还是它们是分离的? 我将附上 CC2650的 SRAM 存储器映射 pdf。 其中有4个组 Banks0-3、2个4K 组和2个6k 组。 我可以将所有这些都用于我的程序吗? 我知道我不能将所有存储器仅用于缓冲区、但我想找出可以使缓冲区完全访问20k SRAM 的最大大小。  

谢谢、

Kati

e2e.ti.com/.../SRAM.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kati、

    我不建议修改闪存和 RAM 位置。 我认为最好的方法是使用 CCS 中内置的内存分配小工具来查看剩余的 RAM 容量。

    此致、
    /TA