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.

[参考译文] 链接器错误:不能将 noinit 段与需要初始化的段混合。

Guru**** 2581345 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1116523/linker-error-cannot-mix-noinit-sections-with-sections-that-require-initialization

主题中讨论的其他器件:MSP430FR2433

您好!

我的团队最近支持了一个有关使用.TI.persistent 段编译代码的客户问题。 在编译器 v15上、该 项目编译为清理。 但是、对于 v21.6.0.0 LTS、它会失败、并显示以下消息:

Invoking: MSP430 Linker
"C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-msp430_21.6.0.LTS/bin/cl430" -vmspx --use_hw_mpy=F5 --advice:hw_config=all --define=CTPL_STACK_SIZE=160 --define=__MSP430FR2433__ -g --printf_support=minimal --diag_warning=225 --diag_wrap=off --display_error_number --abi=eabi --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 -z -m"calendar_tamper_detect_gui_ccs.map" --heap_size=160 --stack_size=160 --cinit_hold_wdt=on -i"C:/ti/ccs1110/ccs/ccs_base/msp430/include" -i"C:/ti/ccs1110/ccs/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-msp430_21.6.0.LTS/lib" -i"C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-msp430_21.6.0.LTS/include" --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info="calendar_tamper_detect_gui_ccs_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "calendar_tamper_detect_gui_ccs.out" "./Source/GUIComm_JSON.obj" "./Source/RTC_Calendar.obj" "./Source/callbacks_JSON.obj" "./Source/ctpl_msp430fr2433.obj" "./Source/ctpl_pre_init.obj" "./Source/main.obj" "./Source/MSP430_GUI/MSP430_GUI.obj" "./Source/MSP430_GUI/jsmn/jsmn.obj" "./Source/MSP430_HAL/HAL_GUIComm_UART.obj" "./fram-utilities/ctpl/ctpl.obj" "./fram-utilities/ctpl/ctpl_low_level.obj" "./fram-utilities/ctpl/ctpl_low_level_macros.obj" "./fram-utilities/ctpl/peripherals/ctpl_adc.obj" "./fram-utilities/ctpl/peripherals/ctpl_adc10_b.obj" "./fram-utilities/ctpl/peripherals/ctpl_adc12_b.obj" "./fram-utilities/ctpl/peripherals/ctpl_captio.obj" "./fram-utilities/ctpl/peripherals/ctpl_comp_d.obj" "./fram-utilities/ctpl/peripherals/ctpl_comp_e.obj" "./fram-utilities/ctpl/peripherals/ctpl_crc16.obj" "./fram-utilities/ctpl/peripherals/ctpl_crc32.obj" "./fram-utilities/ctpl/peripherals/ctpl_cs.obj" "./fram-utilities/ctpl/peripherals/ctpl_dmax_3.obj" "./fram-utilities/ctpl/peripherals/ctpl_dmax_6.obj" "./fram-utilities/ctpl/peripherals/ctpl_ecomp.obj" "./fram-utilities/ctpl/peripherals/ctpl_eusci_a.obj" "./fram-utilities/ctpl/peripherals/ctpl_eusci_b.obj" "./fram-utilities/ctpl/peripherals/ctpl_fram.obj" "./fram-utilities/ctpl/peripherals/ctpl_lcd_c.obj" "./fram-utilities/ctpl/peripherals/ctpl_lcd_e.obj" "./fram-utilities/ctpl/peripherals/ctpl_mpu.obj" "./fram-utilities/ctpl/peripherals/ctpl_mpy32.obj" "./fram-utilities/ctpl/peripherals/ctpl_pmm.obj" "./fram-utilities/ctpl/peripherals/ctpl_port.obj" "./fram-utilities/ctpl/peripherals/ctpl_port_int.obj" "./fram-utilities/ctpl/peripherals/ctpl_rc.obj" "./fram-utilities/ctpl/peripherals/ctpl_ref_a.obj" "./fram-utilities/ctpl/peripherals/ctpl_rtc.obj" "./fram-utilities/ctpl/peripherals/ctpl_rtc_b.obj" "./fram-utilities/ctpl/peripherals/ctpl_rtc_c.obj" "./fram-utilities/ctpl/peripherals/ctpl_sac.obj" "./fram-utilities/ctpl/peripherals/ctpl_sfr.obj" "./fram-utilities/ctpl/peripherals/ctpl_sys.obj" "./fram-utilities/ctpl/peripherals/ctpl_timer_2.obj" "./fram-utilities/ctpl/peripherals/ctpl_timer_3.obj" "./fram-utilities/ctpl/peripherals/ctpl_timer_5.obj" "./fram-utilities/ctpl/peripherals/ctpl_timer_7.obj" "./fram-utilities/ctpl/peripherals/ctpl_tri.obj" "./fram-utilities/ctpl/peripherals/ctpl_wdt_a.obj" "../lnk_msp430fr2433.cmd"  -llibmath.a -llibc.a 
<Linking>
error #10367-D: output section ".TI.persistent" cannot mix noinit sections with sections that require initialization.
   NOINIT sections:
   - .TI.persistent:ctpl_PORTA_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_PORTB_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_FRAM_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_PMM_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_CS_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_SYS_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_SFR_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_RTC_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_MPY32_storage:ctpl_msp430fr2433.obj
   - .TI.persistent:ctpl_WDT_A_storage:ctpl_msp430fr2433.obj
   Sections not specified as NOINIT:
   - .TI.persistent:ctpl_low_level.obj
warning #10419-D: "ALL_FRAM" contains both ".cinit" and ".TI.persistent"; compression "lzss" can not be performed for ".TI.persistent"
error #10010: errors encountered during linking; "calendar_tamper_detect_gui_ccs.out" not built

我相信链接器错误的代码位于两个文件中:

# ctpl_msp430fr2433.c

#if defined(__TI_COMPILER_VERSION__)
#pragma PERSISTENT(ctpl_PORTA_storage)
#elif defined(__IAR_SYSTEMS_ICC__)
__persistent
#endif
uint16_t ctpl_PORTA_storage[CTPL_PORT_INT_STORAGE_LENGTH] = {0};

; ctpl_low_level.asm

; FRAM stack copy
ctpl_stackCopy      .usect ".TI.persistent",CTPL_STACK_SIZE,2

; RAM copy
    .if $defined(CTPL_RAM_SIZE)
ctpl_ramCopy        .usect ".TI.persistent",CTPL_RAM_SIZE,2
    .endif

; Low level state variables
ctpl_mode           .usect ".TI.persistent",2,2
ctpl_state          .usect ".TI.persistent",2,2
ctpl_stackUsage     .usect ".TI.persistent",2,2

链接器消息指出、它不能将.TI.persistent 中的 NOINIT 和非 NOINIT 数据混合在一起(尽管我假设该消息将 PERSISTENT 数据视为 NOINIT)。  

是否可以将.usect 定义的符号标记为 NOINIT? 或者是否有更好的方法来解决这个问题?

CCS 项目:

e2e.ti.com/.../calendar_5F00_tamper_5F00_detect_5F00_gui_5F00_ccs.zip

此致、

Evan

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

    恢复旧编译器行为的最直接的方法是抑制此诊断...

    错误#10367-D:输出段".TI.persistent"无法将 noinit 段与需要初始化的段混合。

    诊断标识符中的-D 表示它是可自由选择的、这意味着您可以更改工具处理它的方式。  在这种情况下、由于您可以使用.TI.persistent 中的未初始化变量和段、因此添加选项-diag_suppress=10367。  下面是一个屏幕截图。  请确保您在适当的位置添加了说明此选项设置的注释、可能包含指向此论坛主题帖的链接。

    有关控制连接器诊断的更多详细信息、 请在 MSP430汇编工具手册中搜索 标题 为控制连接器诊断的子章节。

    谢谢、此致、

    乔治

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

    谢谢 George、这对我很有影响。

    此致、

    Evan