- 打卡等级:以坛为家I
- 打卡总天数:347
- 最近打卡:2026-03-07 12:55:14
管理员
- 积分
- 22606
|
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[256];
memory model 还是尽量使用官方建议的XSmall模式
|
|