cancel
Showing results for 
Search instead for 
Did you mean: 

startup_stm32f407xx.s ARMCLANG 6.x problem

Jnevi.1
Senior

Hi,

i'm using Keil with the ARMClang 6.x compiler, an STM32f407 and CubeMX to configure my project.

I was playing arround with dynamic memory allocation and was wondering why

uint8_t* b_;
b_ = static_cast<uint8_t*>(std::calloc(100, sizeof(uint8_t)));

works but

b_ = static_cast<uint8_t*>(std::calloc(512, sizeof(uint8_t)));

always was returning 0x0000000.

After reading on the ARM/Keil website i came to the conclusion that

IMPORT  __use_two_region_memory

in the startup_stm32f407xx.s seems to be the reason for this fault(?)

I'm not exactly sure if this is a fault or to be excpected and i'm overseeing sth. But after comenting out this line i get a valid pointer when i try to allocate 512 byte (or more)

Why is it working i if allocate a smaller memory area?

And can i fix this somehow so that not everytime i generate the project again my startup file is overwritten? Or is this something which should be fixed in this startup file by ST?

Thanks for help.

3 REPLIES 3

>>Why is it working i if allocate a smaller memory area?

How much HEAP have you specified?

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Jnevi.1
Senior

Btw: i'm using c++ so i cannot use the microlib which seems to have an impact on this (some lines before it is taken care of)

I did not change the standard 0x200 defined in this file.

I​ tried to allocate 500byte(did not work), 256byte did work.

When i comment out the __use_two_region_memory line it is always working (1kb is no problem)

But at the moment i'm asking myself why i can allocate 1kb when i define only 0x200 Byte of heapspace. I did not Touch this low level stuff before so i think i have to get more knowlledge

Jnevi.1
Senior

And i use rtx5. I hope it does not configure sth in the back which has impact on this behaviour