gpt4 book ai didi

c - XC8 : Cannot define auto array

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:26 25 4
gpt4 key购买 nike

我定义了一个自动字符数组如下:

char buffer[100];

当我编译它时,编译器返回以下错误:

error: (1250) could not find space (100 bytes) for variable _buffer

但是当我把它改成:

static char buffer[100];

程序编译成功。

注1:

我的目标设备是 16f1829。

注2:

编译器版本为1.30。

最佳答案

所有 PIC16 都有 RAM 组,每个组有 80 字节的可用 RAM。这在数据表的第 3.2.4 节通用 RAM 中进行了描述。

您看到的问题与堆栈的大小无关,而是与堆栈上可以分配的每个项目的大小有关。

在 XC8 上,auto 变量不能单独大于一个 ram,这意味着最大的 auto 变量可能是 80 个字节。

这在 XC8 编译器用户指南的 5.5.2.2.3 节中有如下详细描述:

与非自动变量不同,使用增强型中档设备的线性内存访问编译堆栈中的自动变量效率不高。对于所有器件,包括 PIC18 和增强型中档 PIC MCU,编译堆栈的每个组件必须完全适合目标器件上的一个数据存储器组(但是,您可以有多个组件,每个组件分配到不同的组).这将堆栈中对象的大小限制为分配它的存储区的最大可用空间。堆栈中的自动变量越多;空间对大物体的限制越多。回想一下,中端设备上的 SFR 通常存在于每个数据库中,因此每个库中可用的 GPR 的最大数量通常小于这些设备的库大小。

关于c - XC8 : Cannot define auto array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com