【发布时间】:2022-01-17 12:07:36
【问题描述】:
拿一个简单的文件:
int main(void) {
return 0;
}
我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.20)
project(TRA
VERSION 0.0.1
DESCRIPTION "STM32 Traffic Controller"
LANGUAGES C ASM)
set(BSP_DRIVER_FILES
BSP/tra/startup_stm32f429xx.s
BSP/tra/Core/Src/system_stm32f4xx.c
)
set(BSP_COMPILER_FLAGS
-DUSE_HAL_DRIVER
-DSTM32F429xx
-I${CMAKE_SOURCE_DIR}/BSP/tra/Core/Inc
-I${CMAKE_SOURCE_DIR}/BSP/tra/Drivers/STM32F4xx_HAL_Driver/Inc
-I${CMAKE_SOURCE_DIR}/BSP/tra/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
-I${CMAKE_SOURCE_DIR}/BSP/tra/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-I${CMAKE_SOURCE_DIR}/BSP/tra/Drivers/CMSIS/Include
)
add_executable(tra)
target_sources(tra PRIVATE
${BSP_DRIVER_FILES}
code/tra.c
)
set(COMPILER_FLAGS
${BSP_COMPILER_FLAGS}
-O0 -g -ggdb3
-mcpu=cortex-m4 -mthumb -mfloat-abi=soft
-fdata-sections -ffunction-sections
--specs=rdimon.specs
)
target_compile_options(tra PRIVATE
${COMPILER_FLAGS}
)
target_link_options(tra PRIVATE
-mcpu=cortex-m4 -mthumb -mfloat-abi=soft
--specs=rdimon.specs -lm -lc
-Wl,--gc-sections
)
正在运行qemu-arm build/tra。
我明白了
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault (core dumped)
我的理解是这个问题通常是由 qemu 不处理硬件 FPU 引起的,但是我在这里指定了软件浮点。另外,我已经从我的 startup.c 文件中删除了 FPU 初始化代码。 使用 gdb:
# Start
qemu-arm -g 1234 build/tra
# Attach
arm-none-eabi-gdb -q --nh -ex 'file build/tra' -ex 'target remote localhost:1234'
我在SystemInit() 遇到分段错误。运行 gdb list,它显示了注释掉的 FPU 初始化代码,所以我不明白这可能是什么问题。
因此,我不知道发生了什么。
【问题讨论】:
标签: cmake segmentation-fault arm qemu stm32f4