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.

[参考译文] CC2630:只生成 TIMAC 闪存、不清楚如何分配 RAM

Guru**** 2378650 points
Other Parts Discussed in Thread: Z-STACK, SYSBIOS, TIMAC, CC2630
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1287441/cc2630-timac-flash-only-build-not-sure-how-to-allocate-ram

器件型号:CC2630
Thread 中讨论的其他器件:SysBIOSTIMAC、Z-stack、

我编写的是现有部署、因此无法使用 ROM 中提供的资源。 SYSBIOS 和 Stack 必须完全位于闪存中。 我看到 堆栈的 flash_only 配置占用了板载 RAM (10kb)的全部50%、SYS/BIOS 和其他应用程序端 RTOS 资源占用了7k (对我映射文件中的大型项目求和)、几乎没有剩下的空间用于实际应用。 我已经注意到、如果我使用远小于750字节的线程堆栈大小、我会在进行 ICall 查询时崩溃。 MSA 示例使用704的堆栈大小 作为参考。

我想弄清楚的是、

1.有没有办法减少堆栈或应用端系统组件对 RAM 的需求?

2.如何确定我需要为使 ICall 与无线电通信的线程提供多大的堆栈? 考虑到我的限制是多么的紧,我需要一个硬数字的 空间,我可以安全地工作。

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

    Daniel、您好!

    您可以引用链接器配置(ICF)和输出.map 文件以进一步了解编译时间 RAM 分配。  您可能能够跟踪堆内存、请参阅 TIMAC_1_05_02_43299\Documents\Heap Memory Management.pdf。  如果不使用传感器控制器、则可以利用 AUX_RAM、 或 考虑将 高速缓存用作 GPRAM

    此致、
    瑞安

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

    GPRAM 从缓存中额外释放8k 将为我提供所需的一切。 我将深入了解 AUX_RAM、但可能不需要它。 谢谢!

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

    我对堆管理感到困惑。  我不知道有堆、也不知道如果堆由内部库管理、我会如何重新分配堆。 引用的文档与 Z stack 相关、这很奇怪、因为它的软件不同、甚至不支持 CC26x0平台。 我看到过一些与堆相关的 code composer 工具的引用、但实际上无法找到这些引用(它们似乎与较新的软件包相关、但我无法使用)。

    缓存中、就像不启动一样。 cc2630不支持该 功能、也不支持 我必须用于 TIMAC 的 TI RTOS 版本。 还需要进行我无法在现场进行的 CCFG 更改。

    我还在努力弄清楚如何为连接器 AUX_RAM 提供一个链接器、但它看起来更加简单、所以我在弄清楚之后会更新它。

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

    Daniel、您好!

    我很遗憾听到你继续遇到的困难。  感谢您提醒我 TI-RTOS 和 CC2630不支持 GPRAM。  我 还看到了对 Z-Stack 的引用、如果不存在相同的定义、则同意这可能不适用于您的解决方案。  很难跟踪这些已弃用的文档和代码包。  请在您进一步使用链接器 AUX_RAM 配置后提供最新信息。

    此致、
    瑞安

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

    AUX RAM 是 一个解决方案、但不是很好的解决方案。 我无法找到将其添加到 GPRAM 的方法、这可能是一件好事。 我看到其他线程建议不支持将 AUX RAM 用于任何系统功能、因为它的速度要慢得多(我以低于1/4的速度对其进行配置)。 不过、我可以在该地址空间中创建一个读取/写入区域、并使用 LOCATION pragma 在其中放置静态缓冲区。 C 代码也可以访问 AUX RAM 地址、无需使用任何 ICF 文件、但通常最好将内容留给链接器。

    // ICF file
    define symbol AUXRAM_START           = 0x400E0000;
    define symbol AUXRAM_SIZE            = 0x800;
    define symbol AUXRAM_END             = AUXRAM_START + AUXRAM_SIZE - 1;
    define region AUXRAM_MEM          = mem:[from AUXRAM_START to AUXRAM_END];
    place in AUXRAM_MEM { readwrite section AUXRAM };
    
    // C code
    #define AUXMEM _Pragma("location=\"AUXRAM\"")
    AUXMEM static uint8_t tx_buf[128];
    AUXMEM static uint8_t tx_buf_enc[128];
    // ect