This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Put the Stack & Heap into a memory region ?

Hi
On projects that have different data memory regions - how do you force the stack and heap into a specific region.

I am using the STM32F4xxx and there are two (default)memory regions IRAM1 and IRAM2. In the asm startup file there is:


Stack_Size      EQU     0x00004000
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

Heap_Size       EQU     0x00008000
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB

By default the linker is putting the stack and heap in IRAM2 and I want it in IRAM1. Not really clued up on the assembler directives. :(

While on the subject of allocation - I have tried various combinations to get 2x __attribute directives into 1X statement but the only way I can get it to work is with 2x:

SerialChannel_Typedef __attribute__((aligned))  sSerialCh1;
sSerialChannel_Typedef __attribute__((section("IRAM1")))  sSerialCh1;
// This works

// I tried this
SerialChannel_Typedef __attribute__((aligned)(section("IRAM1"))))  sSerialCh1;
// and this
SerialChannel_Typedef __attribute__((aligned))((section("IRAM1")))  sSerialCh1;
// both don't work - compiler gives errors

Any ideas?

Thanks
Peter

  • Perhaps this article might be helpful for you:

    http://www.keil.com/support/docs/3480.htm

    I needed quite a time to figure out, how to use uninitialized data in C++ for STM32F4 - there are some "misguiding" articles in Internet - but the above works perfect.

    ... so I handled only uninitialized static global memory data - but not stack data or dynamic alloc data - but maybe it is a help for you anyway ...