最近项目开发,EVM开发板上的内存居然不够用了,那可是32MB的SDRAM啊.
在DSP/BIOS里面配置的是0x80000000, len = 0x02000000, 默认生成一个16M大小的heap,标识符为:_EXTERNALHEAP。 在
TSK配置里面,tskLoopback配置里面的栈配置:0x100000 = 1MB,够大吧。那SDRAM的堆栈结构式怎样的呢,还真没注意,
查看map文件,发现:
section page origin length
-------- ---- ---------- ----------
.SDRAM$heap 0 80000000 01000000
.stack 0 81000000 00100000
.tskLoopback$stk 0 81100000 00100000
.far 0 81200000 0008979c
.text 0 812897a0 0003ba20
.const 0 812c51c0 0001bd0c
.cinit 0 812e0ed0 0000735c
接下来的内容, 同样能解释内存布局:
GLOBAL SYMBOLS: SORTED BY Symbol Address
80000000 .data
80000000 PRD_A_TABBEG
80000000 PRD_A_TABEND
80000000 SDRAM$B
80000000 _SDRAM_base
80000000 ___data__
80000000 ___edata__
80000000 edata
81000000 GBL_stackbeg
81000000 _HWI_STKTOP
81000000 __stack
810ffff8 _HWI_STKBOTTOM
810fffff GBL_stackend
81100000 tskLoopback$stack
811fff98 tskLoopback$stkptr
812800c0 _hist
812804c0 _lut
...
...
812f20cc GBL_initdone
其中_EXTERNALHEAP占0x80000000后16M,系统栈和tskLoopback的栈各占1M, 接下来,.text等section,不超过2M, 在代码段后面, 还有的空闲的内存空间大约16 - 3 = 13M。将_EXTERNALHEAP增大即可。