战争:找不到输入符号reset_handler;默认为0000000008000000 我正在尝试使用我自己的CMAKE文件构建STM32应用程序。我已经能够编译并将静态库与项目链接并构建可执行文件。我正在使用此.LD文件: /*条目...

问题描述 投票:0回答:1
i定义了一些变量,例如此文件中的reset_handler入口点:

.syntax unified .cpu cortex-m7 .fpu softvfp .thumb .global g_pfnVectors .global Default_Handler /* start address for the initialization values of the .data section. defined in linker script */ .word _sidata /* start address for the .data section. defined in linker script */ .word _sdata /* end address for the .data section. defined in linker script */ .word _edata /* start address for the .bss section. defined in linker script */ .word _sbss /* end address for the .bss section. defined in linker script */ .word _ebss /* stack used for SystemInit_ExtMemCtl; always internal RAM used */ .section .text.Reset_Handler .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: ldr sp, =_estack /* set stack pointer */ /* Call the clock system initialization function.*/ bl SystemInit /* Copy the data segment initializers from flash to SRAM */ ldr r0, =_sdata ldr r1, =_edata ldr r2, =_sidata movs r3, #0 b LoopCopyDataInit CopyDataInit: ldr r4, [r2, r3] str r4, [r0, r3] adds r3, r3, #4 LoopCopyDataInit: adds r4, r0, r3 cmp r4, r1 bcc CopyDataInit /* Zero fill the bss segment. */ ldr r2, =_sbss ldr r4, =_ebss movs r3, #0 b LoopFillZerobss FillZerobss: str r3, [r2] adds r2, r2, #4 LoopFillZerobss: cmp r2, r4 bcc FillZerobss /* Call static constructors */ bl __libc_init_array /* Call the application's entry point.*/ bl main bx lr .size Reset_Handler, .-Reset_Handler ... some code
I使用此CMAKE文件构建可执行项目,其中我将.ld文件链接到链接选项中,将.s文件作为源文件。这种方法正确吗?

... add_subdirectory(${STLIB_DIR} ${STLIB_DIR}/build) add_executable(${EXECUTABLE} ${CMAKE_SOURCE_DIR}/Core/Src/main.cpp ${CMAKE_SOURCE_DIR}/Core/Src/syscalls.c ${CMAKE_SOURCE_DIR}/Core/Src/stm32h7xx_hal_msp.c ${CMAKE_SOURCE_DIR}/Core/Src/stm32h7xx_it.c ${CMAKE_SOURCE_DIR}/Core/Src/sysmem.c ${CMAKE_SOURCE_DIR}/Core/Src/system_stm32h7xx.c ${CMAKE_SOURCE_DIR}/Core/Startup/startup_stm32h723zgtx.s ) target_link_libraries(${EXECUTABLE} ${STLIB_DIR}/build/libst-lib.a) ... target_link_options(${EXECUTABLE} PUBLIC -T${CMAKE_SOURCE_DIR}/STM32H723ZGTX_FLASH.ld -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -specs=nosys.specs -lc -lm -lnosys -Wl,-Map=${PROJECT_NAME}.map,--cref -Wl,--gc-sections )

	

没有看到整个

CMakeLists.txt
的情况很难说,但是您可能没有适当配置您的项目的ASM支持。
enable_language(C ASM)
cmake arm stm32 flash-memory
1个回答
0
投票
您还希望确保您在调用CMAKE时通过

.cmake

传递适当的工具链文件。对于我的项目,我使用了由STM32Cubeide生成的工具链文件进行“模板” CMAKE项目:

CMAKE_TOOLCHAIN_FILE
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.