下面的例子是针对TI的ZStack-CC2530-2.5.0中的SerialApp例程(非官方例程)进行编译剖析,通过查看编译输出的MAP文件来了解XDATA的大致情况。
我们知道CC2530是8K的内存,这部分就是XDATA的大小,官方例程编译完成已经用了7K左右的内存了,剩余给我们使用的内存并不多。一旦我们想要扩大部分参数的时候,这点内存就显得捉襟见肘了。
XDATA是用于静态变量,包括全局变量和本地变量,如全局变量中的路由表,绑定表,以及协议栈使用的内存堆等,以及本地变量如ZDP_BUF等。下面罗列出几个占用XDATA较多的静态变量,开发者如果想要节省出部分XDATA用于自己的程序,需要评估自己的应用情况,酌情减少一些静态变量,不要影响到自己原来功能的稳定性。
1.theHeap 2600 bytes.
Relative segment, address: XDATA 000011D3 - 00001BFA (0xa28 bytes), align: 0
Segment part 7. Intra module refs: osal_mem_alloc
osal_mem_free
osal_mem_init
LOCAL ADDRESS
===== =======
theHeap 000011D3
2.ZDP_Buf 80 bytes.
Relative segment, address: XDATA 000005DB - 0000062A (0x50 bytes), align: 0
Segment part 8. Intra module refs: ?Subroutine52
Segment part 10
ZDP_MgmtNwkUpdateNotify
ZDP_MgmtRtgRsp
ENTRY ADDRESS REF BY
===== ======= ======
ZDP_Buf 000005DB
3. app_AtProcess::buf 这是函数中的静态缓冲 180 bytes.
Relative segment, address: XDATA 00000671 - 00000724 (0xb4 bytes), align: 0
Segment part 160. Intra module refs: ?Subroutine34
app_AtProcess
LOCAL ADDRESS
===== =======
app_AtProcess::buf 00000671
4.SerialApp_TxBuf 81 bytes.
Relative