您好!
我的团队最近支持了一个有关使用.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
