找回密码
 立即注册
查看: 107|回复: 0

STC32 / Ai8051U 堆栈要设置吗, 内部研究后给出如下看法 | 不用

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2026-03-07 12:55:14

842

主题

1万

回帖

2万

积分

管理员

积分
22606
发表于 2026-2-15 10:04:22 | 显示全部楼层 |阅读模式
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模式


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 16:51 , Processed in 0.096831 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表