找回密码
 立即注册
查看: 87|回复: 2

关于32G系列单片机的 堆栈到底要不要手动设置 问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-09-09 10:16:03

6

主题

8

回帖

120

积分

注册会员

积分
120
发表于 5 天前 | 显示全部楼层 |阅读模式
关于32G系列单片机堆栈的问题    以前咨询过STC技术支持      说堆栈不用大小不用设置   默认的即可  编译器会自动设置      今天到论坛看到默认的堆栈只有256个字节       又说到 “ 合理设置堆栈大小对于系统的稳定性和性能至关重要 ”    以后使用 STC32G系列单片机时  这个堆栈 到底 要不要 手动设置?

截图202509091013407527.jpg
截图202509091014405573.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-14 09:47:40

778

主题

1万

回帖

1万

积分

管理员

积分
19093
发表于 4 天前 | 显示全部楼层
内部又研究了下,给出如下看法:
对于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模式


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:241
  • 最近打卡:2025-09-13 20:53:30
已绑定手机

14

主题

46

回帖

843

积分

高级会员

积分
843
发表于 4 天前 | 显示全部楼层
神*** 发表于 2025-9-10 08:26
内部又研究了下,给出如下看法:
对于Ai8051U-32位的C语言程序,如无特殊需求,堆栈是不用用户设置的。
对 ...

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-14 11:13 , Processed in 0.149511 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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