I am having problem with the external memory.
Not so long ago my program used both the internal memory and the external, but I managed to move both the heap and the stack to the external memory (2 megabyte) ,and for now I am not using the internal memory anymore.
Everything worked great until now, I added a memory pool (taken from the freeRTOS source code). when I define my array (that will be used for the allocations) to 1 mb (or even less than that),I receive a hard-fault on startup, i managed to pin-point the problem :
ldr r3, = _ebss
cmp r2, r3
/* Call static constructors */
bl __libc_init_array // <- Here is the problem
I know that this function initializes the static variables , i also managed to find the exact location in the assembly on where it happens :
0804a490: __libc_init_array+40 b.n 0x804a49a <__libc_init_array+50>
0804a492: __libc_init_array+42 ldr.w r3, [r5],#4
0804a496: __libc_init_array+46 blx r3 //<- here is the problem
0804a498: __libc_init_array+48 adds r4,#1
0804a49a: __libc_init_array+50 cmp r4, r6
0804a49c: __libc_init_array+52 bne.n 0x804a492 <__libc_init_array+42>
My guess that it's trying to go to an invalid address, but why does it happens?
Also here is the output from the hard fault trace :
R0 = 0
R1 = 2000032C
R2 = 0
R3 = 64000240
R12 = 31
LR [R14] = 804F36B subroutine call returnaddress //don't thing that it matters but its address of a function called "wctob"
PC [R15] = 0 program counter
PSR = 60000000
BFAR = E000ED38
CFSR = 20000
HFSR = 40000000
DFSR = 1
AFSR = 0
SCB_SHCSR = 0
The program counter is 0 , so for sure a reset happened .
I also attached my linker script and the startup file for you to look at.
(btw, when I am allocating a really small array for the memory pool (like 100k) ,it works fine.
Any help will be mostly appreciated