Stack placed in RAM2

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Stack placed in RAM2

2,270 次查看
markvanderheijd
Contributor II

My stack is placed at location 0x20080000 on my LPC1766. Thats AHB SRAM - bank 1. I like to have my stack on the On-chip SRAM(0x10000000). my linker script is defined like this:

PROVIDE(_pvHeapStart = DEFINED(__user_heap_base) ? __user_heap_base : .);
PROVIDE(_vStackTop = DEFINED(__user_stack_top) ? __user_stack_top : __top_RamLoc32 - 0);

What can be the reason that it still writing in RAM2(bank1)?

标签 (1)
0 项奖励
回复
4 回复数

1,902 次查看
markvanderheijd
Contributor II

Thank you for your reaction, 

I hope you can explain me something.

when i execute this code:

uint8_t test;

printf("test addr %x\r\n",&test);

my debug output says:
test addr 20083fe7

So my thought was that [test] is placed on the stack and with asking the adders of [test] i can figure out where the stack is placed.

my current problem is that the initialization of local variable goes wrong.

void SCR_idle(void){
   Point_t point1 = {.x=120,.y=30}; 

..etc

after executing Point_t point1 = {.x=120,.y=30};  the value of point.x ==0 and point.y == 0.
when i was searching for the problem i found out with printing the location of the variables that its on a different location.

I though that my  memory was build up like:

On-chip SRAM-bottom:

-vtable
-bss

-data

-heap

On-chip SRAM-top:

-stack

RAM2

-bss (large buffers defined by   __BSS(RAM2))

whats wrong with my interpretation?

thank you in advance!

0 项奖励
回复

1,902 次查看
jeremyzhou
NXP Employee
NXP Employee

Hi mark van der Heijden,

Thanks for your reply and I'd like to confirm something wih you.

Whether test is the global value.
Have a great day,
TIC

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 项奖励
回复

1,902 次查看
markvanderheijd
Contributor II

Hi Jeremyzhou,

Thank you for your reaction.

The variables are local variables.


I moved more buffers to RAM2 and now my code seems to work. But i still don't understand whats happening.
two things are unclear for me.

1. my previous question : wy the  function :
void SCR_idle(void){
   Point_t point1 = {.x=120,.y=30}; 

   printf("debug addr: %x", &point1 )

}

printout a location in the RAM2 segment.

2.in my startup file i write my whole memory(On-chip SRAM) with a pattern 

unsigned int addr;
for(addr = 0x10000000; addr < 0x10007DFF; addr++){
if(addr %2){
*(unsigned int *)addr = 0xde;
}else{
*(unsigned int *)addr = 0xad;
}
}

after the failing initialization of a local variable i checked my memory and i see a lot of DEADDE still in my memory. Wat can be the reason that the initialization is failing.

thank you in advance!

0 项奖励
回复

1,902 次查看
jeremyzhou
NXP Employee
NXP Employee

Hi mark van der Heijden,

The question seems a bit interesting, and I will appreciate if you share the completely testing code.

I'm looking forward to your reply.
Have a great day,
TIC

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 项奖励
回复