Feature/add memap cstack usage ports (#661)
* Added memap, avstack, and checkstackusage tools to STM32F4xx Makefile and CMake builds to calculate CSTACK depth and RAM usage * Added memap, cstack, and ram-usage recipes to stm32f10x port Makefile. Added Cmake build. * Removed local dlmstp.c module from stm32f10x port, and used the common datalink dlmstp.c module with MS/TP extended frames and zero-config support. * Added .nm and .su to .gitignore to skip the analysis file residue.
This commit is contained in:
@@ -49,8 +49,12 @@ set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
|
||||
set(CMAKE_AR arm-none-eabi-ar)
|
||||
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
|
||||
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
|
||||
set(SIZE arm-none-eabi-size)
|
||||
set(CMAKE_SIZE arm-none-eabi-size)
|
||||
set(CMAKE_NM arm-none-eabi-nm)
|
||||
set(CMAKE_CSTACK "${CMAKE_SOURCE_DIR}/../../tools/check-stack-usage/checkStackUsage.py")
|
||||
set(CMAKE_MEMAP "${CMAKE_SOURCE_DIR}/../../tools/memap/memap.py")
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
set(EXECUTABLE ${PROJECT_NAME}.elf)
|
||||
|
||||
project(bacnet-mstp)
|
||||
|
||||
@@ -64,6 +68,7 @@ add_compile_options(-mcpu=cortex-m4)
|
||||
add_compile_options(-mthumb -mthumb-interwork)
|
||||
add_compile_options(-ffunction-sections -fdata-sections)
|
||||
add_compile_options(-fno-common -fmessage-length=0)
|
||||
add_compile_options(-fstack-usage -fdump-rtl-dfinish)
|
||||
add_link_options(-mcpu=cortex-m4)
|
||||
add_link_options(-mthumb -mthumb-interwork)
|
||||
add_link_options(-Wl,-gc-sections,--print-memory-usage)
|
||||
@@ -95,13 +100,13 @@ if(BACNET_STACK_DEPRECATED_DISABLE)
|
||||
add_definitions(-DBACNET_STACK_DEPRECATED_DISABLE)
|
||||
endif()
|
||||
|
||||
set(LIBRARY_BACNET_INC "../../src")
|
||||
set(LIBRARY_BACNET_CORE "../../src/bacnet")
|
||||
set(LIBRARY_BACNET_BASIC "../../src/bacnet/basic")
|
||||
set(LIBRARY_STM32_SRC "./STM32F4xx_StdPeriph_Driver/src")
|
||||
set(LIBRARY_STM32_INC "./STM32F4xx_StdPeriph_Driver/inc")
|
||||
set(LIBRARY_CMSIS_INC "./CMSIS")
|
||||
set(LIBRARY_CMSIS_GCC_INC "./CMSIS/gcc_ride7")
|
||||
set(LIBRARY_BACNET_INC "${CMAKE_SOURCE_DIR}/../../src")
|
||||
set(LIBRARY_BACNET_CORE "${CMAKE_SOURCE_DIR}/../../src/bacnet")
|
||||
set(LIBRARY_BACNET_BASIC "${CMAKE_SOURCE_DIR}/../../src/bacnet/basic")
|
||||
set(LIBRARY_STM32_SRC "${CMAKE_SOURCE_DIR}/STM32F4xx_StdPeriph_Driver/src")
|
||||
set(LIBRARY_STM32_INC "${CMAKE_SOURCE_DIR}/STM32F4xx_StdPeriph_Driver/inc")
|
||||
set(LIBRARY_CMSIS_INC "${CMAKE_SOURCE_DIR}/CMSIS")
|
||||
set(LIBRARY_CMSIS_GCC_INC "${CMAKE_SOURCE_DIR}/CMSIS/gcc_ride7")
|
||||
|
||||
set(BACNET_PROJECT_SOURCE
|
||||
${LIBRARY_STM32_SRC}/stm32f4xx_adc.c
|
||||
@@ -242,6 +247,8 @@ target_compile_options(${EXECUTABLE} PRIVATE
|
||||
-Wno-comment
|
||||
-Wno-missing-braces
|
||||
-Wno-unused-variable
|
||||
# reference the linker file for CSTACK size
|
||||
-Wstack-usage=16384
|
||||
-Wno-unused-parameter
|
||||
-Wno-char-subscripts
|
||||
)
|
||||
@@ -263,15 +270,42 @@ target_link_options(${EXECUTABLE} PRIVATE
|
||||
-Wl,--gc-sections
|
||||
)
|
||||
|
||||
# Create hex and bin files
|
||||
add_custom_command(TARGET ${EXECUTABLE}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin
|
||||
)
|
||||
|
||||
# Print executable size
|
||||
add_custom_command(TARGET ${EXECUTABLE}
|
||||
POST_BUILD
|
||||
COMMAND arm-none-eabi-size ${EXECUTABLE}
|
||||
COMMAND ${CMAKE_SIZE} ${EXECUTABLE}
|
||||
)
|
||||
|
||||
# Create hex file
|
||||
add_custom_command(TARGET ${EXECUTABLE}
|
||||
POST_BUILD
|
||||
COMMAND arm-none-eabi-objcopy -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
|
||||
COMMAND arm-none-eabi-objcopy -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin
|
||||
# sort the RAM usage by size and place into a file
|
||||
add_custom_target(symbols
|
||||
DEPENDS ${EXECUTABLE}
|
||||
COMMENT "Print memory symbols by size"
|
||||
COMMAND ${CMAKE_NM} -t d -S --size-sort ${EXECUTABLE} 1> ${PROJECT_NAME}.nm
|
||||
COMMAND echo "RAM usage by size analysis in ${PROJECT_NAME}.nm"
|
||||
COMMAND echo "=ADDRESS= ==RAM=== = ==VARIABLE-NAME=="
|
||||
COMMAND tail ${PROJECT_NAME}.nm
|
||||
)
|
||||
|
||||
# calculate the worst case CSTACK memory usage by size and place into a file
|
||||
add_custom_target(cstack
|
||||
DEPENDS ${EXECUTABLE}
|
||||
COMMENT "Print CSTACK memory depth by size"
|
||||
COMMAND ${CMAKE_CSTACK} ${EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR} 1> ${PROJECT_NAME}.su
|
||||
COMMAND echo "C-Stack maxium depth analysis in ${PROJECT_NAME}.su"
|
||||
COMMAND echo "==DEPTH== : == Functions called =="
|
||||
COMMAND tail ${PROJECT_NAME}.su
|
||||
)
|
||||
|
||||
# Print file and library sizes
|
||||
add_custom_target(memmap
|
||||
DEPENDS ${PROJECT_NAME}.map
|
||||
COMMENT "Print file and library memory usage by size"
|
||||
COMMAND ${CMAKE_MEMAP} -t GCC_ARM ${PROJECT_NAME}.map
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user