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

Better support for Core-coupled SRAM.

Fix #54.
Konstantin Oblaukhov 8 лет назад
Родитель
Сommit
c0b8aa39be

+ 3 - 3
README.md

@@ -71,13 +71,13 @@ You can use cmake variables below to tune the generated linker. To specify a cus
 * `STM32_RAM_SIZE` - RAM size (**default**: from chip name)
 * `STM32_MIN_STACK_SIZE` - Minimum stack size for error detection at link-time (**default**: 512 bytes)
 * `STM32_MIN_HEAP_SIZE` - Minimum heap size for error detection at link-time (**default**: 0 bytes)
-* `STM32_CCRAM_ORIGIN` - Start address of Core-Coupled RAM (only for F4 family) (**default**: 0x10000000)
-* `STM32_CCRAM_SIZE` - Core-Coupled RAM size (only for F4 and F7 family) (**default**: 64 KiB)
+* `STM32_CCRAM_ORIGIN` - Start address of Core-Coupled RAM (**default**: 0x10000000)
+* `STM32_CCRAM_SIZE` - Core-Coupled RAM size (**default**: 64 KiB)
 
 ## Useful cmake macros
 
 * `STM32_GET_CHIP_TYPE(CHIP CHIP_TYPE)` - gets chip type from chip name.
-* `STM32_GET_CHIP_PARAMETERS(CHIP FLASH_SIZE RAM_SIZE)` - gets chip ram/flash size from chip name.
+* `STM32_GET_CHIP_PARAMETERS(CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)` - gets chip ram/flash size from chip name.
 * `STM32_SET_FLASH_PARAMS(TARGET ...)` - sets chip flash/ram parameters for target.
 * `STM32_SET_CHIP_DEFINITIONS(TARGET CHIP_TYPE)` - sets chip family and type-specific compiler flags for target.
 * `STM32_SET_TARGET_PROPERTIES(TARGET)` - sets all needed parameters and compiler flags for target.

+ 1 - 5
cmake/gcc_stm32.cmake

@@ -146,10 +146,6 @@ FUNCTION(STM32_SET_FLASH_PARAMS TARGET FLASH_SIZE RAM_SIZE)
         SET(STM32_CCRAM_ORIGIN "0x10000000")
     ENDIF()
 
-    IF(NOT STM32_CCRAM_SIZE)
-        SET(STM32_CCRAM_SIZE "64K")
-    ENDIF()
-
     IF(NOT STM32_LINKER_SCRIPT)
         MESSAGE(STATUS "No linker script specified, generating default")
         INCLUDE(stm32_linker)
@@ -180,7 +176,7 @@ FUNCTION(STM32_SET_TARGET_PROPERTIES TARGET)
         MESSAGE(FATAL_ERROR "Cannot get chip parameters. Please specify either STM32_CHIP or STM32_FLASH_SIZE/STM32_RAM_SIZE")
     ENDIF()
     IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
-        STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
+        STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE STM32_CCRAM_SIZE)
         IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
             MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_FLASH_SIZE/STM32_RAM_SIZE directly.")
         ENDIF()

+ 5 - 4
cmake/gcc_stm32f0.cmake

@@ -10,7 +10,7 @@ SET(STM32_CHIP_TYPES 030x6 030x8 031x6 038xx 042x6 048x6 051x8 058xx 070x6 070xB
 SET(STM32_CODES "030.[46]" "030.8" "031.[46]" "038.6" "042.[46]" "048.6" "051.[468]" "058.8" "070.6" "070.B" "071.[8B]" "072.[8B]" "078.B" "091.[BC]" "098.C" "030.C")
 
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]((03[018].[468C])|(04[28].[46])|(05[18].[468])|(07[0128].[68B])|(09[18].[BC])).+$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]((03[018].[468C])|(04[28].[46])|(05[18].[468])|(07[0128].[68B])|(09[18].[BC])).*$" "\\1" STM32_CODE ${CHIP})
     SET(INDEX 0)
     FOREACH(C_TYPE ${STM32_CHIP_TYPES})
         LIST(GET STM32_CODES ${INDEX} CHIP_TYPE_REGEXP)
@@ -22,9 +22,9 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](0[34579][0128]).[468BC]" "\\1" STM32_CODE ${CHIP})
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]0[34579][0128].([468BC])" "\\1" STM32_SIZE_CODE ${CHIP})
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](0[34579][0128]).[468BC].*$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]0[34579][0128].([468BC]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
 
     IF(STM32_SIZE_CODE STREQUAL "4")
         SET(FLASH "16K")
@@ -76,6 +76,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} "0K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)

+ 6 - 5
cmake/gcc_stm32f1.cmake

@@ -10,7 +10,7 @@ SET(STM32_CHIP_TYPES 100xB 100xE 101x6 101xB 101xE 101xG 102x6 102xB 103x6 103xB
 SET(STM32_CODES "100.[468B]" "100.[CDE]" "101.[46]" "101.[8B]" "101.[CDE]" "101.[FG]" "102.[46]" "102.[8B]" "103.[46]" "103.[8B]" "103.[CDE]" "103.[FG]" "105.[8BC]" "107.[BC]")
 
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357].[468BCDEFG]).+$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357].[468BCDEFG]).*$" "\\1" STM32_CODE ${CHIP})
     SET(INDEX 0)
     FOREACH(C_TYPE ${STM32_CHIP_TYPES})
         LIST(GET STM32_CODES ${INDEX} CHIP_TYPE_REGEXP)
@@ -22,9 +22,9 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357]).[468BCDEFG]" "\\1" STM32_CODE ${CHIP})
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]10[012357].([468BCDEFG])" "\\1" STM32_SIZE_CODE ${CHIP})
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357]).[468BCDEFG].*$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]10[012357].([468BCDEFG]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
 
     IF(STM32_SIZE_CODE STREQUAL "4")
         SET(FLASH "16K")
@@ -116,6 +116,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} "0K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
@@ -130,4 +131,4 @@ FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
         SET(TARGET_DEFS "STM32F1;STM32F${CHIP_TYPE}")
     ENDIF()
     SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS "${TARGET_DEFS}")
-ENDFUNCTION()
+ENDFUNCTION()

+ 2 - 1
cmake/gcc_stm32f2.cmake

@@ -22,7 +22,7 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]2[01][57].([BCDEFG]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
 
     IF(STM32_SIZE_CODE STREQUAL "B")
@@ -51,6 +51,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} "0K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)

+ 6 - 1
cmake/gcc_stm32f3.cmake

@@ -21,18 +21,22 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](3[037][1234].[68BC]).*$" "\\1" STM32_CODE ${CHIP})
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]3[037][1234].([68BC]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
 
     IF(STM32_SIZE_CODE STREQUAL "6")
         SET(FLASH "32K")
+        SET(CCRAM "4K")
     ELSEIF(STM32_SIZE_CODE STREQUAL "8")
         SET(FLASH "64K")
+        SET(CCRAM "4K")
     ELSEIF(STM32_SIZE_CODE STREQUAL "B")
         SET(FLASH "128K")
+        SET(CCRAM "8K")
     ELSEIF(STM32_SIZE_CODE STREQUAL "C")
         SET(FLASH "256K")
+        SET(CCRAM "8K")
     ENDIF()
 
     STM32_GET_CHIP_TYPE(${CHIP} TYPE)
@@ -51,6 +55,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} ${CCRAM})
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)

+ 3 - 2
cmake/gcc_stm32f4.cmake

@@ -21,7 +21,7 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](4[01234][15679].[BCEGI]).*$" "\\1" STM32_CODE ${CHIP})
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]4[01234][15679].([BCEGI]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
     
@@ -67,6 +67,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
     
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} "64K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
@@ -82,4 +83,4 @@ FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
     ENDIF()
         
     SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS "${TARGET_DEFS}")
-ENDFUNCTION()
+ENDFUNCTION()

+ 3 - 1
cmake/gcc_stm32f7.cmake

@@ -21,7 +21,7 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](7[4567][5679].[EGI]).*$" "\\1" STM32_CODE ${CHIP})
     STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]7[4567][5679].([EGI]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
     
@@ -53,6 +53,8 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
     
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    # First 64K of RAM are already CCM...
+    SET(${CCRAM_SIZE} "0K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)

+ 2 - 1
cmake/gcc_stm32l0.cmake

@@ -22,7 +22,7 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
     SET(${CHIP_TYPE} ${RESULT_TYPE})
 ENDMACRO()
 
-MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     STRING(REGEX REPLACE "^[sS][tT][mM]32[lL](0[12345678][123]).[3468BZ]" "\\1" STM32_CODE ${CHIP})
     STRING(REGEX REPLACE "^[sS][tT][mM]32[lL]0[12345678][123].([3468BZ])" "\\1" STM32_SIZE_CODE ${CHIP})
 
@@ -78,6 +78,7 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 
     SET(${FLASH_SIZE} ${FLASH})
     SET(${RAM_SIZE} ${RAM})
+    SET(${CCRAM_SIZE} "0K")
 ENDMACRO()
 
 FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)

+ 4 - 4
cmake/stm32_linker.cmake

@@ -1,6 +1,9 @@
 # TODO: Add support for external RAM
 
-IF(STM32_FAMILY STREQUAL "F4")
+IF((NOT STM32_CCRAM_SIZE) OR (STM32_CCRAM_SIZE STREQUAL "0K"))
+  SET(STM32_CCRAM_DEF "")
+  SET(STM32_CCRAM_SECTION "")
+ELSE()
   SET(STM32_CCRAM_DEF "  CCMRAM (rw) : ORIGIN = ${STM32_CCRAM_ORIGIN}, LENGTH = ${STM32_CCRAM_SIZE}\n")
   SET(STM32_CCRAM_SECTION 
   "  _siccmram = LOADADDR(.ccmram)\;\n"
@@ -14,9 +17,6 @@ IF(STM32_FAMILY STREQUAL "F4")
   "    _eccmram = .\;\n"
   "  } >CCMRAM AT> FLASH\n"
   )
-ELSE()
-  SET(STM32_CCRAM_DEF "")
-  SET(STM32_CCRAM_SECTION "")
 ENDIF()
 
 SET(STM32_LINKER_SCRIPT_TEXT