Hi,
What I think is happening is the next (I had the same problem using IAR for
MSP430). When you call a function the compiler look for all the stack space
you need inside the function and allocate in stack memory (if you optimize
the compiler can reduce the amount of stack memory because "reuse" , sorry
for my English, the space), no matter if you define differents scopes:
Void Function(void)
{
Unsigned int I;
{
Unsigned int j;
}
}
This will allocate 4 bytes in RAM (with no optimization selected).
So, in your code, all the memory you need is allocated, much more, I think
that when you allocate memory in main the compiler define this memory as
"global vars", so you have this memory used always.
I think the solution for you is define a function to do the initial
processing, and call it from the main function. This way the stack space is
free after the function call, and you will have all the memory available
when you call the ROM function:
typedef unsigned char uint8_t;
volatile uint8_t r1[20];
void auxiliary_function(void)
{
volatile uint8_t i = 0;
for (i=0;i<20;i++) {
r1[i] = i;
}
{
volatile uint8_t r2[20];
r2[19] = 0x34;
}
{
volatile uint8_t r3[50];
r3[49] = 45;
}
}
int main(void)
{
auxiliary_function();
//Start real program.
Boot_rom->start() ;
}
This way I think you will have all memory available at the moment you call
Boot_rom->start();
So, I want to say that this is what I think you can do, and what I think is
happening, If somebody tell you another solution, please believe the other
because I am not a GCC expert.
Hope will be usefull.
Bye.