# FreeRTOS+MPU for CORTEXM4 - Linker script problem

**URL:** <https://forums.freertos.org/t/freertos-mpu-for-cortexm4-linker-script-problem/9696>\
**Category:** Kernel\
**Created:** [May 3, 2020, 6:01pm UTC](https://forums.freertos.org/t/freertos-mpu-for-cortexm4-linker-script-problem/9696 "2020-05-03T18:01:53Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![stjepan\_skrnjug](https://avatars.discourse-cdn.com/v4/letter/s/7bcc69/32.png) [@stjepan\_skrnjug](https://forums.freertos.org/u/stjepan_skrnjug)\
**Post date:** [May 3, 2020, 6:01pm UTC](https://forums.freertos.org/t/freertos-mpu-for-cortexm4-linker-script-problem/9696/1 "2020-05-03T18:01:53Z")

</div>

Hello,

For my project, I am testing freeRTOS with MPU on STM32G4XX processor.  
I would like to give a one task statically allocated memory on defined addresses in RAM.  
Example : Task1 Given RAM memory in range : 0x2000 0000 - 0x2000 0800 LEN=2K

I have generated code with STM32CubeMx with freeRTOS v10.2.1.  
I have replaced generated files port.c and portmacro.h with files from STM32Cube\_FW\_G4\_V1.2.0\Middlewares…\freeRTOS\GCC\ARM\_CM4\_MPU.

I have also added file mpu\_wrappers. c.  
Linker file is changed and pieces of code below are added.  
In STM32 generated linker script added:  
\_Privileged\_Functions\_Region\_Size = 2K;  
\_Privileged\_Data\_Region\_Size = 1K;

**FLASH\_segment\_start** = ORIGIN( FLASH ) + 1024;  
**FLASH\_segment\_end** = **FLASH\_segment\_start** + LENGTH( FLASH );  
**privileged\_functions\_start** = ORIGIN( FLASH );  
**privileged\_functions\_end** = **privileged\_functions\_start** + \_Privileged\_Functions\_Region\_Size;  
**SRAM\_segment\_start** = ORIGIN( RAM );  
**SRAM\_segment\_end** = **SRAM\_segment\_start** + LENGTH( RAM );  
**privileged\_data\_start** = ORIGIN( RAM );  
**privileged\_data\_end** = ORIGIN( RAM ) + \_Privileged\_Data\_Region\_Size;  
/\* User\_heap\_stack section, used to check that there is enough “RAM” Ram type memory left _/  
.privileged\_functions :  
{  
KEEP(_(.isr\_vector))  
\*(privileged\_functions)  
} \> FLASH  
With this added, privileged data is not defined.

I am trying to test xCreateRestrictedStatic function.  
Can you please provide me some instructions how to write linker file so this function could work ?

Thanks in advance,  
Stjepan

---

<div class="post-metadata">

**Author:** ![rtel](https://d3iykfbgfh8zhg.cloudfront.net/user_avatar/forums.freertos.org/rtel/32/31_2.png) [@rtel](https://forums.freertos.org/u/rtel)\
**Post date:** [May 3, 2020, 7:01pm UTC](https://forums.freertos.org/t/freertos-mpu-for-cortexm4-linker-script-problem/9696/2 "2020-05-03T19:01:36Z")

</div>

Here is the book chapter on the subjet:

> **[MPU\_Chapter.pdf](https://www.freertos.org/MPU_Chapter.pdf)**
>
> 407.18 KB

Here are some examples in the FreeRTOS download:

> <https://github.com/FreeRTOS/FreeRTOS/blob/master/FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC/GCC_Specific/sections.ld>

> <https://github.com/FreeRTOS/FreeRTOS/blob/master/FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Projects/MCUXpresso/FreeRTOSDemo.ld>

> <https://github.com/FreeRTOS/FreeRTOS/blob/master/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/STM32L152RETX_FLASH.ld>

> <https://github.com/FreeRTOS/FreeRTOS/blob/master/FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Projects/GCC/STM32L475VGTX_FLASH.ld>

(there are other demos too).

Hope that helps.
