STC32 / Ai8051U 堆栈要设置吗, 内部研究后给出如下看法 | 不用
STC32 / Ai8051U堆栈要设置吗, 内部研究后给出如下看法:对于Ai8051U-32位的C语言程序,如无特殊需求,堆栈是不用用户设置的。
对于STC32G, 32位的C语言程序,如无特殊需求,堆栈是不用用户设置的。
首先,编译器会将堆栈的起始地址设置在用户代码中实际使用的edata结束的位置
比如:用户代码中实际使用了1K字节的edata,则编译器会将堆栈指针SPX设置为0x3FF
Ai8051U-32的内部有2K的edata,从0x400~0x7FF的edata全部都是堆栈,
虽然编译器默认只保留了256字节,但实际程序运行是超过了256,也不会有任何问题
除非程序中有使用绝对地址访问edata,否则用户代码使用的edata和堆栈不会有任何冲突
总结:
程序中如果需要定义比较大的数组,建议单独使用xdata关键字将数组分配到xdata区域,
比如:int xdata buffer;
memory model 还是尽量使用官方建议的XSmall模式
如果使用了大的局部变量,堆栈设置还是需要的,可以保证编译通过,堆栈大小是满足设定的尺寸的,
页:
[1]