Просмотр исходного кода

Fix the RAM size for STM32F3 MCUs

- STM32F3 family MCUs have RAM + CCRAM = total RAM. Previously the CCRAM
  was counted as part of the normal RAM, causing incorrect linker files
  with a too large RAM section.
- Without this fix, STM32F3 MCUS will probably fail at the initialization of
  RAM or static variables.
- Fixed by subtracting the CCRAM size from the total RAM size in CMake.
Clemens Zangl 6 лет назад
Родитель
Сommit
fae8c7ca41
1 измененных файлов с 15 добавлено и 9 удалено
  1. 15 9
      cmake/gcc_stm32f3.cmake

+ 15 - 9
cmake/gcc_stm32f3.cmake

@@ -27,32 +27,38 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
 
 
     IF(STM32_SIZE_CODE STREQUAL "6")
     IF(STM32_SIZE_CODE STREQUAL "6")
         SET(FLASH "32K")
         SET(FLASH "32K")
-        SET(CCRAM "4K")
+        SET(CCRAM_SIZE_IN_K "4")
     ELSEIF(STM32_SIZE_CODE STREQUAL "8")
     ELSEIF(STM32_SIZE_CODE STREQUAL "8")
         SET(FLASH "64K")
         SET(FLASH "64K")
-        SET(CCRAM "4K")
+        SET(CCRAM_SIZE_IN_K "4")
     ELSEIF(STM32_SIZE_CODE STREQUAL "B")
     ELSEIF(STM32_SIZE_CODE STREQUAL "B")
         SET(FLASH "128K")
         SET(FLASH "128K")
-        SET(CCRAM "8K")
+        SET(CCRAM_SIZE_IN_K "8")
     ELSEIF(STM32_SIZE_CODE STREQUAL "C")
     ELSEIF(STM32_SIZE_CODE STREQUAL "C")
         SET(FLASH "256K")
         SET(FLASH "256K")
-        SET(CCRAM "8K")
+        SET(CCRAM_SIZE_IN_K "8")
     ENDIF()
     ENDIF()
 
 
     STM32_GET_CHIP_TYPE(${CHIP} TYPE)
     STM32_GET_CHIP_TYPE(${CHIP} TYPE)
 
 
     IF(${TYPE} STREQUAL "301xx")
     IF(${TYPE} STREQUAL "301xx")
-        SET(RAM "16K")
+        SET(RAM_SIZE_IN_K "16")
     ELSEIF(${TYPE} STREQUAL "302xx")
     ELSEIF(${TYPE} STREQUAL "302xx")
-        SET(RAM "256K")
+        SET(RAM_SIZE_IN_K "256")
     ELSEIF(${TYPE} STREQUAL "303xx")
     ELSEIF(${TYPE} STREQUAL "303xx")
-        SET(RAM "48K")
+        SET(RAM_SIZE_IN_K "48")
     ELSEIF(${TYPE} STREQUAL "334xx")
     ELSEIF(${TYPE} STREQUAL "334xx")
-        SET(RAM "16K")
+        SET(RAM_SIZE_IN_K "16")
     ELSEIF(${TYPE} STREQUAL "373xx")
     ELSEIF(${TYPE} STREQUAL "373xx")
-        SET(RAM "128K")
+        SET(RAM_SIZE_IN_K "128")
     ENDIF()
     ENDIF()
 
 
+    # RAM size = total RAM - CCRAM
+    MATH(EXPR RAM_SIZE_IN_K "${RAM_SIZE_IN_K}-${CCRAM_SIZE_IN_K}")
+    # Append the 'K' literal to the numbers
+    SET(RAM "${RAM_SIZE_IN_K}K")
+    SET(CCRAM "${CCRAM_SIZE_IN_K}K")
+    
     SET(${FLASH_SIZE} ${FLASH})
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
     SET(${RAM_SIZE} ${RAM})
     SET(${CCRAM_SIZE} ${CCRAM})
     SET(${CCRAM_SIZE} ${CCRAM})