找回密码
 立即注册
查看: 674|回复: 4

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-04-01 13:20:26

6

主题

8

回帖

125

积分

注册会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 2025-9-10 08:26:42 | 显示全部楼层

STC32 / Ai8051U 堆栈要设置吗, 内部研究后给出如下看法 | 不用 - 仿真/编译器/汇编器/头文件 国芯人工智能技术交流网站 - AI32位8051交流社区


内部又研究了下,给出如下看法:

对于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
  • 打卡总天数:393
  • 最近打卡:2026-07-05 11:12:28
已绑定手机

15

主题

49

回帖

1284

积分

金牌会员

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:295
  • 最近打卡:2026-07-03 15:36:22
已绑定手机

22

主题

663

回帖

2480

积分

金牌会员

积分
2480
发表于 2025-9-25 09:01:06 | 显示全部楼层
根据需要可以修改堆栈大小
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-11-20 17:49:04

1

主题

4

回帖

129

积分

注册会员

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

edata需要最少预留多大空间才能满足正常使用,现在经常遇到内存不够的问题
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 12:29 , Processed in 0.079634 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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