yzjyh 发表于 2025-9-9 10:16:56

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

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

神农鼎 发表于 2025-9-10 08:26:42

内部又研究了下,给出如下看法:
对于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模式

fanpu 发表于 2025-9-10 19:43:33

神农鼎 发表于 2025-9-10 08:26
内部又研究了下,给出如下看法:
对于Ai8051U-32位的C语言程序,如无特殊需求,堆栈是不用用户设置的。
对 ...

{:qiang:}

Ayb_ice 发表于 2025-9-25 09:01:06

根据需要可以修改堆栈大小
页: [1]
查看完整版本: 关于32G系列单片机的 堆栈到底要不要手动设置 问题