clang samd51 compile but does not run, rom is correct, but ram is lacking bss. Got stkerr -> hardfault

This commit is contained in:
hathach
2024-04-19 13:40:42 +07:00
parent 824e39ddeb
commit be0d62ba6c
7 changed files with 45 additions and 20 deletions

View File

@@ -7,7 +7,11 @@ if (TOOLCHAIN STREQUAL "gcc")
set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "") set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "clang") elseif (TOOLCHAIN STREQUAL "clang")
message(FATAL_ERROR "Clang is not supported for this target") set(TOOLCHAIN_COMMON_FLAGS
--target=arm-none-eabi
-mcpu=cortex-m0plus
)
set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "iar") elseif (TOOLCHAIN STREQUAL "iar")
set(TOOLCHAIN_COMMON_FLAGS set(TOOLCHAIN_COMMON_FLAGS

View File

@@ -7,7 +7,11 @@ if (TOOLCHAIN STREQUAL "gcc")
set(FREERTOS_PORT GCC_ARM_CM23_NTZ_NONSECURE CACHE INTERNAL "") set(FREERTOS_PORT GCC_ARM_CM23_NTZ_NONSECURE CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "clang") elseif (TOOLCHAIN STREQUAL "clang")
message(FATAL_ERROR "Clang is not supported for this target") set(TOOLCHAIN_COMMON_FLAGS
--target=arm-none-eabi
-mcpu=cortex-m23
)
set(FREERTOS_PORT GCC_ARM_CM23_NTZ_NONSECURE CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "iar") elseif (TOOLCHAIN STREQUAL "iar")
set(TOOLCHAIN_COMMON_FLAGS set(TOOLCHAIN_COMMON_FLAGS

View File

@@ -6,7 +6,11 @@ if (TOOLCHAIN STREQUAL "gcc")
set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "") set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "clang") elseif (TOOLCHAIN STREQUAL "clang")
message(FATAL_ERROR "Clang is not supported for this target") set(TOOLCHAIN_COMMON_FLAGS
--target=arm-none-eabi
-mcpu=cortex-m3
)
set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "iar") elseif (TOOLCHAIN STREQUAL "iar")
set(TOOLCHAIN_COMMON_FLAGS set(TOOLCHAIN_COMMON_FLAGS

View File

@@ -8,7 +8,12 @@ if (TOOLCHAIN STREQUAL "gcc")
set(FREERTOS_PORT GCC_ARM_CM33_NTZ_NONSECURE CACHE INTERNAL "") set(FREERTOS_PORT GCC_ARM_CM33_NTZ_NONSECURE CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "clang") elseif (TOOLCHAIN STREQUAL "clang")
message(FATAL_ERROR "Clang is not supported for this target") set(TOOLCHAIN_COMMON_FLAGS
--target=arm-none-eabi
-mcpu=cortex-m33
-mfpu=fpv5-sp-d16
)
set(FREERTOS_PORT GCC_ARM_CM33_NTZ_NONSECURE CACHE INTERNAL "")
elseif (TOOLCHAIN STREQUAL "iar") elseif (TOOLCHAIN STREQUAL "iar")
set(TOOLCHAIN_COMMON_FLAGS set(TOOLCHAIN_COMMON_FLAGS

View File

@@ -31,11 +31,13 @@ if (TOOLCHAIN STREQUAL "gcc")
-Wl,--gc-sections -Wl,--gc-sections
-Wl,--cref -Wl,--cref
) )
elseif (TOOLCHAIN STREQUAL "iar") elseif (TOOLCHAIN STREQUAL "iar")
#list(APPEND TOOLCHAIN_COMMON_FLAGS) #list(APPEND TOOLCHAIN_COMMON_FLAGS)
list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS
--diag_suppress=Li065 --diag_suppress=Li065
) )
elseif (TOOLCHAIN STREQUAL "clang") elseif (TOOLCHAIN STREQUAL "clang")
list(APPEND TOOLCHAIN_COMMON_FLAGS list(APPEND TOOLCHAIN_COMMON_FLAGS
-fdata-sections -fdata-sections
@@ -45,7 +47,7 @@ elseif (TOOLCHAIN STREQUAL "clang")
list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS
-Wl,--print-memory-usage -Wl,--print-memory-usage
-Wl,--gc-sections -Wl,--gc-sections
#-Wl,--cref -Wl,--cref
) )
endif () endif ()

View File

@@ -219,8 +219,9 @@ function(family_configure_common TARGET RTOS)
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
target_link_options(${TARGET} PUBLIC "LINKER:--no-warn-rwx-segments") target_link_options(${TARGET} PUBLIC "LINKER:--no-warn-rwx-segments")
endif () endif ()
endif() elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
if (CMAKE_C_COMPILER_ID STREQUAL "IAR") target_link_options(${TARGET} PUBLIC "LINKER:-Map=$<TARGET_FILE:${TARGET}>.map")
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
target_link_options(${TARGET} PUBLIC "LINKER:--map=$<TARGET_FILE:${TARGET}>.map") target_link_options(${TARGET} PUBLIC "LINKER:--map=$<TARGET_FILE:${TARGET}>.map")
endif() endif()

View File

@@ -1,6 +1,7 @@
include_guard() include_guard()
set(SDK_DIR ${TOP}/hw/mcu/microchip/samd51) set(SDK_DIR ${TOP}/hw/mcu/microchip/samd51)
set(CMSIS_5 ${TOP}/lib/CMSIS_5)
# include board specific # include board specific
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
@@ -18,6 +19,16 @@ set(OPENOCD_OPTION "-f interface/cmsis-dap.cfg -c \"transport select swd\" -c \"
# only need to be built ONCE for all examples # only need to be built ONCE for all examples
function(add_board_target BOARD_TARGET) function(add_board_target BOARD_TARGET)
if (NOT TARGET ${BOARD_TARGET}) if (NOT TARGET ${BOARD_TARGET})
set(LD_FILE_Clang ${LD_FILE_GNU})
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
message(FATAL_ERROR "LD_FILE_${CMAKE_C_COMPILER_ID} not defined")
endif ()
if (NOT DEFINED STARTUP_FILE_${CMAKE_C_COMPILER_ID})
set(STARTUP_FILE_GNU ${SDK_DIR}/gcc/gcc/startup_samd51.c)
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
endif ()
add_library(${BOARD_TARGET} STATIC add_library(${BOARD_TARGET} STATIC
${SDK_DIR}/gcc/system_samd51.c ${SDK_DIR}/gcc/system_samd51.c
${SDK_DIR}/hpl/gclk/hpl_gclk.c ${SDK_DIR}/hpl/gclk/hpl_gclk.c
@@ -25,6 +36,7 @@ function(add_board_target BOARD_TARGET)
${SDK_DIR}/hpl/osc32kctrl/hpl_osc32kctrl.c ${SDK_DIR}/hpl/osc32kctrl/hpl_osc32kctrl.c
${SDK_DIR}/hpl/oscctrl/hpl_oscctrl.c ${SDK_DIR}/hpl/oscctrl/hpl_oscctrl.c
${SDK_DIR}/hal/src/hal_atomic.c ${SDK_DIR}/hal/src/hal_atomic.c
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
) )
target_include_directories(${BOARD_TARGET} PUBLIC target_include_directories(${BOARD_TARGET} PUBLIC
${SDK_DIR}/ ${SDK_DIR}/
@@ -34,29 +46,22 @@ function(add_board_target BOARD_TARGET)
${SDK_DIR}/hal/utils/include ${SDK_DIR}/hal/utils/include
${SDK_DIR}/hpl/port ${SDK_DIR}/hpl/port
${SDK_DIR}/hri ${SDK_DIR}/hri
${SDK_DIR}/CMSIS/Include ${CMSIS_5}/CMSIS/Core/Include
) )
update_board(${BOARD_TARGET}) update_board(${BOARD_TARGET})
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
message(FATAL_ERROR "LD_FILE_${CMAKE_C_COMPILER_ID} not defined")
endif ()
if (NOT DEFINED STARTUP_FILE_${CMAKE_C_COMPILER_ID})
set(STARTUP_FILE_GNU ${SDK_DIR}/gcc/gcc/startup_samd51.c)
endif ()
target_sources(${BOARD_TARGET} PRIVATE
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
)
if (CMAKE_C_COMPILER_ID STREQUAL "GNU") if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_link_options(${BOARD_TARGET} PUBLIC target_link_options(${BOARD_TARGET} PUBLIC
"LINKER:--script=${LD_FILE_GNU}" "LINKER:--script=${LD_FILE_GNU}"
-nostartfiles -nostartfiles
--specs=nosys.specs --specs=nano.specs --specs=nosys.specs --specs=nano.specs
) )
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
target_link_options(${BOARD_TARGET} PUBLIC
"LINKER:--script=${LD_FILE_Clang}"
#"LINKER:-lcrt0"
)
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR") elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
target_link_options(${BOARD_TARGET} PUBLIC target_link_options(${BOARD_TARGET} PUBLIC
"LINKER:--config=${LD_FILE_IAR}" "LINKER:--config=${LD_FILE_IAR}"