.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
传递适当的工具链文件。对于我的项目,我使用了由STM32Cubeide生成的工具链文件进行“模板” CMAKE项目:
CMAKE_TOOLCHAIN_FILE