diff --git a/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/FreeRTOSDemo_ns.sct b/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/FreeRTOSDemo_ns.sct index dc3c9ae85..e523fa16a 100644 --- a/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/FreeRTOSDemo_ns.sct +++ b/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/FreeRTOSDemo_ns.sct @@ -2,60 +2,77 @@ ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* -; Privileged Code: -; Start : 0x00200000 -; End : 0x00208000 - 1 -; Size : 32 Kbytes +; Flash Layout +; [ ARMv8-M MPU requires that each region must start on a 32 byte aligned +; address and the size of a region must be a multiple of 32 bytes. ] ; -; Privileged Data: -; Start : 0x20200000 -; End : 0x20201000 - 1 -; Size : 4 Kbytes -LR_IROM_NS_PRIVILEGED 0x00200000 0x00008000 ; load region size_region +; --------------------- +; | Privileged Code | +; --------------------- +; | System Calls | +; --------------------- +; | Unprivileged Code | +; --------------------- + +LR_CODE 0x00200000 ; load region { - ER_IROM_NS_PRIVILEGED +0 ; load address = execution address + ER_IROM_NS_PRIVILEGED +0 ALIGN 32 { *.o(RESET, +First) *(InRoot$$Sections) ; All sections that must be in a root region *(privileged_functions) } - ER_IRAM_NS_PRIVILEGED 0x20200000 0x00001000 + ER_IROM_NS_PRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0 + { + } + + ER_IROM_NS_FREERTOS_SYSTEM_CALLS +0 ALIGN 32 + { + *(freertos_system_calls) + } + + ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN +0 ALIGN 32 EMPTY 0x0 + { + } + + ER_IROM_NS_UNPRIVILEGED +0 ALIGN 32 + { + *(+RO) + } + + ER_IROM_NS_UNPRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0 + { + } +} + +; RAM Layout +; [ ARMv8-M MPU requires that each region must start on a 32 byte aligned +; address and the size of a region must be a multiple of 32 bytes. ] +; +; --------------------- +; | Privileged Data | +; --------------------- +; | Unprivileged Data | +; --------------------- + +LR_DATA 0x20200000 ; load region +{ + ER_IRAM_NS_PRIVILEGED 0x20200000 ALIGN 32 { *(privileged_data) } -} -; FreeRTOS System Calls: -; Start : 0x00208000 -; End : 0x00209000 - 1 -; Size : 4 Kbytes -LR_IROM_NS_FREERTOS_SYSTEM_CALLS 0x00208000 0x00001000 ; load region size_region -{ - ER_IROM_NS_FREERTOS_SYSTEM_CALLS +0 ; load address = execution address + ER_IRAM_NS_PRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0 { - *(freertos_system_calls) - } -} - -; Unprivileged Code: -; Start : 0x00209000 -; End : 0x00400000 - 1 -; Size : 2012 Kbytes -; -; Unprivileged Data: -; Start : 0x20201000 -; End : 0x20220000 - 1 -; Size : 124 Kbytes -LR_IROM_NS_UNPRIVILEGED 0x00209000 0x001F7000 ; load region size_region -{ - ER_IROM_NS_UNPRIVILEGED +0 ; load address = execution address - { - *(+RO) } - ER_IRAM_NS_UNPRIVILEGED 0x20201000 0x0001F000 + ER_IRAM_NS_UNPRIVILEGED +0 ALIGN 32 { *(+RW, +ZI) } + + ER_IRAM_NS_UNPRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0 + { + } } diff --git a/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/main_ns.c b/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/main_ns.c index edb4bdd14..42ac4f49a 100644 --- a/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/main_ns.c +++ b/FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/main_ns.c @@ -33,30 +33,40 @@ #include "tz_demo.h" #include "mpu_demo.h" -/* Externs needed by the MPU setup code. These must match the memory map as - * specified in Scatter-Loading description file (FreeRTOSDemo_ns.sct). */ +/* Externs needed by the MPU setup code. These are defined in Scatter-Loading + * description file (FreeRTOSDemo_ns.sct). */ +extern uint32_t Image$$ER_IROM_NS_PRIVILEGED$$Base; +extern uint32_t Image$$ER_IROM_NS_PRIVILEGED_ALIGN$$Limit; +extern uint32_t Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS$$Base; +extern uint32_t Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN$$Limit; +extern uint32_t Image$$ER_IROM_NS_UNPRIVILEGED$$Base; +extern uint32_t Image$$ER_IROM_NS_UNPRIVILEGED_ALIGN$$Limit; + +extern uint32_t Image$$ER_IRAM_NS_PRIVILEGED$$Base; +extern uint32_t Image$$ER_IRAM_NS_PRIVILEGED_ALIGN$$Limit; +extern uint32_t Image$$ER_IRAM_NS_UNPRIVILEGED$$Base; +extern uint32_t Image$$ER_IRAM_NS_UNPRIVILEGED_ALIGN$$Limit; + /* Privileged flash. */ -const uint32_t * __privileged_functions_start__ = ( uint32_t * ) ( 0x00200000 ); -const uint32_t * __privileged_functions_end__ = ( uint32_t * ) ( 0x00208000 - 0x1 ); /* Last address in privileged Flash region. */ +const uint32_t * __privileged_functions_start__ = ( uint32_t * ) &( Image$$ER_IROM_NS_PRIVILEGED$$Base ); +const uint32_t * __privileged_functions_end__ = ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_PRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in privileged Flash region. */ /* Flash containing system calls. */ -const uint32_t * __syscalls_flash_start__ = ( uint32_t * ) ( 0x00208000 ); -const uint32_t * __syscalls_flash_end__ = ( uint32_t * ) ( 0x00209000 - 0x1 ); /* Last address in Flash region containing system calls. */ +const uint32_t * __syscalls_flash_start__ = ( uint32_t * ) &( Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS$$Base ); +const uint32_t * __syscalls_flash_end__ = ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN$$Limit ) - 0x1 ); /* Last address in Flash region containing system calls. */ -/* Unprivileged flash. Note that the section containing - * system calls is unprivilged so that unprivleged tasks - * can make system calls. */ -const uint32_t * __unprivileged_flash_start__ = ( uint32_t * ) ( 0x00209000 ); -const uint32_t * __unprivileged_flash_end__ = ( uint32_t * ) ( 0x00400000 - 0x1 ); /* Last address in un-privileged Flash region. */ +/* Unprivileged flash. Note that the section containing system calls is + * unprivileged so that unprivileged tasks can make system calls. */ +const uint32_t * __unprivileged_flash_start__ = ( uint32_t * ) &( Image$$ER_IROM_NS_UNPRIVILEGED$$Base ); +const uint32_t * __unprivileged_flash_end__ = ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_UNPRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in un-privileged Flash region. */ -/* 512 bytes (0x200) of RAM starting at 0x30008000 is - * priviledged access only. This contains kernel data. */ -const uint32_t * __privileged_sram_start__ = ( uint32_t * ) ( 0x20200000 ); -const uint32_t * __privileged_sram_end__ = ( uint32_t * ) ( 0x20201000 - 0x1 ); /* Last address in privileged RAM. */ +/* RAM with priviledged access only. This contains kernel data. */ +const uint32_t * __privileged_sram_start__ = ( uint32_t * ) &( Image$$ER_IRAM_NS_PRIVILEGED$$Base ); +const uint32_t * __privileged_sram_end__ = ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_PRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in privileged RAM. */ ; /* Unprivileged RAM. */ -const uint32_t * __unprivileged_sram_start__ = ( uint32_t * ) ( 0x20201000 ); -const uint32_t * __unprivileged_sram_end__ = ( uint32_t * ) ( 0x20220000 - 0x1 ); /* Last address in un-privileged RAM. */ +const uint32_t * __unprivileged_sram_start__ = ( uint32_t * ) &( Image$$ER_IRAM_NS_UNPRIVILEGED$$Base ); +const uint32_t * __unprivileged_sram_end__ = ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_UNPRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in un-privileged RAM. */ /*-----------------------------------------------------------*/ /**