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.

[参考译文] 用户段和链接器

Guru**** 2539500 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1167356/user-sections-and-the-linker

器件型号:CC3235MODASF
主题中讨论的其他器件:CC3220SF

您好!

我使用 CC3220MODASF 模块、CCS 12.0.00009、simplelink_cc32xx_sdk_6_10_00_05以及编译器 TI v20.2.7 LTS 和 TI Clang v2.1.0.LTS。
我想创建自己的数据段以保存特定于应用的值。
该段应放置在闪存中。

我通过以下方式修改了 uart2echo 示例:

  •  添加源文件 budrate.c、其中包含为.usersec 段标记的常量变量 cfgbaud
    • 我知道关键字__attribute__不是 TI 和 TICLANG 编译器的最佳关键字,但它会导致所需的结果;)
    • 我还使用 TI 编译器 pragma 方向检查了它。 它还会导致所描述的行为

      #include
      #if 0
       #pragma DATA_SECTION (cfgbaud、".usersec")
       const uint32_t cfgbaud = 115200;
      其他
       const uint32_t cfgbaud __attribute__((section(".usersec"))= 115200;
      #endif

  • 使用.usersec 段中的变量在 uart2echo.c 文件中设置波特率

    // uartParams.budrate = 115200;
    uartParams.baudrate = cfgbaud;

  • 将.usersec 段添加到链接文件 cc32xxsf_tirtos.cmd 中

    部分

       dbghdr    :> flash_hdr
       .resetVecs :>0x01000800
       .text      :> FLASH
       .TI.ramfunc:{} load=flash,run=SRAM,table (BINIT)
       .const     :> FLASH
       .rodata    :> FLASH
       .cinit     :>闪存
       .pinit     :> FLASH
       init_array:> FLASH
       .usersec   :>闪存

       vecs      :>0x20000000
       .data      :> SRAM
       .bss       :> SRAM
       .sysmem    :> SRAM

       /* HeapMem 使用的堆缓冲区*/
       .priheap  :{
           _primary_heap_start__=.;
           。 += HEAPSIZE;
           __primary_heap_end__=.;
       }> SRAM 对齐8

       .stack     :> SRAM (高)
       log_data      :  > log_data,type = copy


映射文件显示创建了.usersec 段、变量 cfgbaud 位于该段内。
在调试器环境中、程序按预期运行。 这对 TI C 和 TI Clang 编译器工具链这两个变体都有效。

但是、从闪存运行不起作用。
变量 cfgbaud 设置为零、未按预期初始化为115200。


有什么想法出错了吗?

此致、
罗马

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

    您好、Roman、

    我正在研究这个问题、同时这个 e2e 线程可能会有所帮助  

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/580852/tms320f28035-mcu-runs-differently-in-normal-and-debug

    此致、

    Rogelio

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

    Rogelio、您好!

    感谢您的回答。
    您发送的链接中讨论的问题与我的问题非常接近。

    BTW。 如果我从中删除 attribute 指令

    const uint32_t cfgbaud __attribute__((section(".usersec"))= 115200;

    更改为

    const uint32_t cfgbaud = 115200;

    一切都很出色。 波特率设置为115200。
    看起来编译器忽略波特率的给定值并将变量初始化为0。

    谢谢、Roman

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

    您好!

    问题仍然存在。
    是否有人也会使用自己的部分、并且可能会给出提示?

    此致、Roman

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

    您好、Roman、

    很抱歉、当我误读您说一切正常时、我认为您很好。 我同意编译器正在初始化为0、使用 const 时、const 的本质就避免了这种情况。

    您能否尝试使用此 pragma

    https://downloads.ti.com/docs/esd/SPRUI04/the-noinit-and-persistent-pragmas-stdz0558942.html#STDZ0558942

    此致、

    Rogelio

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

    Rogelio、您好!

    感谢您的回答。

    我没有找到使用文档中提到的 pragma 来使用我自己的段的解决方案。

    如果我理解文档正确:

    #pragma NOINIT (x)
    -可用于 RAM 中的变量以防止在启动时覆盖值-不适用于我的情况

    #pragma PERSISTENT (x)
    -看起来是一个拥有解决方案、但将数据放入名为.TI.persistent 的段 中-必须将该段添加到链接器文件中
    -如果需要更多用户部分、此 pragma 不起作用-不适用于我的情况

    #prama 位置=0x....
    -需要一个我没有的绝对存储器地址、因为链接器应该执行该操作
    - clang 不支持它
     "pragma PERSISTENT 是传统的 TI pragma、在 clang 编译器中不受支持。  [-WERROR、-WTI-pragma ]"

    我为 CCS12附加了我的示例项目。

    uart2ECHO_CC3220SF_LAUNCHXL_tirtos_ccs\Readme.MD 文件包含有关如何为两个工具链(TI C 和 TI Clang)构建项目的信息。

    非常感谢、祝您一切顺利、
    罗马

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

    e2e.ti.com/.../project.zip

    大家好、
    现在、项目文件为 ZIP 格式而不是7-Zip 格式。

    此致、
    罗马

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

    您好、Roman、

    我有 zip 文件。 我会不断更新您的最新信息。

    谢谢、

    Rogelio

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

    您好、Roman、

    挖掘完一些东西后、我相信我有一个您可以尝试的解决方案。  

    https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/712455/cc3220sf-launchxl-cc3220sf-store-data-in-internal-flash

    此致、

    Rogelio

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

    Rogelio、您好!

    非常感谢、我很快就会试一下。
    很抱歉耽误你的时间。

    此致、
    罗马

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

    不用担心、请告诉我它是否起作用

    BR、

    Rogelio