微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Zstack内存、堆栈精简

Zstack内存、堆栈精简

时间:10-02 整理:3721RD 点击:

CC2530本身有8kRAM内存,运行Zstack完成一般的采集传输工作会用去大概6.5k左右,若要运行复杂的算法,必须精简协议栈,压缩内存,以下是几种可行的手段:

1.全局常量声明为const类型(IAR中const __code与const作用相同),局部常量声明为const static类型(局部变量不允许为const __code),或者声明为const类型的全局常量,总之将常量存放到flash中,读取速度会降低,但可以节约不少内存

2.全局变量和静态变量占用RAM空间知道程序运行结束才释放,而函数局部变量占用栈空间(Stack),函数调用结束就会释放,以供别的函数使用,所以规划好栈空间,非全局作用变量一律声明为局部变量,利用栈的复用可腾出部分内存空间

3.变量尽量复用,即变量当前作用结束后可在后续程序段中扮演别的角色,比如充当临时变量,这样减少了变量的数据,也就减少了内存占用。IAR是在程序运行前将一部分内存分配给栈空间,且该部分空间不能作其他用途,视作已使用空间,减少局部变量的使用能够缩减栈空间,从根本上讲也是在减少内存占用

4.IAR堆栈溢出有时并不报错,如果程序编译无误而运行失败,要考虑是否栈空间不足。栈中会存放这些内容:auto局部变量、表达式临时结果、函数返回值、中断时处理器状态,由此可见栈大小取决于函数调用次数。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top