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.

[参考译文] CC2640R2L:使用 CCS 进行开发时对编译.cinit 有疑问

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1170912/cc2640r2l-doubts-about-compiling-cinit-when-developing-with-ccs

器件型号:CC2640R2L

View -> CCS 编译器之后的内存分配,以查看编译后的数据存储。 发现当定义的数组放置在.data 段中时、

它还将放置在.cinit 段中、该段将放置在闪存中。 问题是、定义数组将占用闪存空间、

由于程序没有剩余太多闪存、如果数组稍大、编译将不起作用。

只需定义一个数组、编译器为什么要将其存储在闪存中? the2e.ti.com/.../change-of-.cinit.docxere 是否可以在不将数组放入.cinit 的情况下定义数组?

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

    您好、Nick、

    数组通常存储在 SRAM .data 段中。   根据您初始化和使用 testBuf 的方式、我假设编译器已确定阵列的值永远不会更改、因此将阵列存储为闪存中的常量。  您可以通过删除编译器优化(Project Properties -> CCS Build -> Arm Compiler -> Optimization)来进一步测试这一点、但我建议您通过从应用程序中为不断变化的变量分配不同的 testBuf 值来进一步测试。  由于数组现在将是真正的变量、编译器应将其存储在 SRAM 中。

    此致、
    Ryan

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

    您的方法不起作用。

    今天我发现以下定义方法可以将数组放置在.bss 段中、这样数组就不会占用闪存:

    uint8_t testbuf[1024];

    #pragma DATA_SECTION (testbuf、".bss:testbufSection");