变量的存储配置
由于单片机的RAM一般都比较小,为考虑系统可靠性,防止存储碎片,使用独立的堆栈体系来存储变量体系,因此系统整体对应的变量总数需要小于配置数量;
//以下是SHMICTRL-V1/V2/V3系列芯片对应的配置:
#define DEF_TatioParamNum 80 //变量整体数量,主DOCK体系中使用此来分配存储空间
#define DEF_GlobalParamNum 32 //全局变量数量的限制
#define DEF_LocalParamNumPerCheng 16 //用户函数支持最大的函数参数
#define DEF_FuncParamstackSize 24 //用户函数允许最大参数数量
全局变量
class app=loadcom(appbase);
class page=loadcom(page);
int a1=0;
int a2=0;
int a3=0;
int a4=0;
int a5=0;
int a6=0;
int a7=0;
int a8=0;
其中,a1~a8就是全局变量,但是class 类型的app、page不占用全局变量的存储空间,它们占用控件存储空间;
上段程序使用了8个全局变量,最大受 DEF_GlobalParamNum(32)个限制,超过后编译出错。
函数参数和局部变量(函数内变量)
void ff(int b1,int b2,int b3,int b4)
{
int a1=0;
int a2=0;
int a3=0;
int a4=0;
}
- b1~b4 是函数参数,受DEF_LocalParamNumPerCheng配置参数的16个参数限制;
- 而a1~a4 是函数内变量,受DEF_FuncParamstackSize(24)配置参数限制,但是需要注意的是b1~b4也是函数内变量,因此此列中函数内变量的数字是8个;
- 有关变量的重置:
void ff(int b1,int b2,int b3,int b4)
{
int a1=0;
str a1=0; //这是重置a1的类型,此类语法是允许的
int b1=0; //重置函数内b1的变量,此类语法也是允许的
}
变量总量的问题
按照 DEF_TatioParamNum(80) 配置,变量需要占用此空间存储,局部变量在函数结束后,会自动释放。