SDCC为MCS51单片机内置了4种内存模型:小、中、大和巨大。对于小型内存模型,SDCC会尝试将所有的变量放在内部内存区域;对于中型,则会尝试放在pdata区域;对于大型和巨大模型,会尝试放在xdata区域。对于巨大模型,还会启用BankSwtiching,以突破64K内存上限。

SDCC还可以指定函数调用栈的存储位置。默认情况下,函数调用栈会放在内部内存区域,其可用大小即内部内存区域大小减去寄存器和全局变量等数据后的大小。可以手工指定将栈放入pdata区域,这种情况下的栈大小将会是256Byte。如果在编写程序的时候遇到了爆栈问题,应该可以尝试指定栈的位置以规避问题。

SDCC官方建议如果没有必要,建议使用小型内存模型,并尽量编写可重入函数,方便编译器进行优化。可重入函数的局部变量都存储在栈上,所以空间效率是比较高的。

分类: 编程

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注