首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PIC18上声明大型数组

在PIC18上声明大型数组
EN

Stack Overflow用户
提问于 2015-01-21 21:26:17
回答 2查看 3.5K关注 0票数 2

我试图使用编译器XC8 v1.32在MPLABXv2.26中声明一个512字节数组。我的目标是一个PIC18F66K90 (4k内存)。

例如,如果我在任何函数( main )中声明数组,就会得到一个错误。

代码语言:javascript
复制
#define buffSize 512

int main (void) {
    char buffer[buffSize];
    ...
}

错误:(1250)找不到变量_buffer的空间(512个字节)

如果我全局声明数组,则不会出现错误。

代码语言:javascript
复制
#define buffSize 512
char buffer[buffSize];

int main (void) {
    ...
}

一切美好和幸福

我已经看过处理器和编译器的用户指南的手册,并怀疑这个问题与RAM库(16组,每个256字节)有关。我的程序使用的是全局声明的数组,但我很好奇为什么必须这样做。这是最佳实践吗?你有什么建议或想法吗?

谢谢你,詹姆斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-21 22:44:19

来自xc8用户指南3.5.2.2和3.5.2.3

自动变量(局部变量的默认类型)存储在已编译的堆栈中。当函数被执行时,它们就会出现,并在函数返回时消失。编译堆栈上的每一项必须安装在一组数据内存中(256 k用于PIC18F66K90)。使用static关键字将类型更改为非自动类型,以便将其存储在普通内存中,从而可以大于一个内存库。

代码语言:javascript
复制
#define buffSize 512

int main (void) {
    static char buffer[buffSize];
    ...
}

这是我现在用的,而且很管用。谢谢你朝正确的方向戳我。

票数 3
EN

Stack Overflow用户

发布于 2015-01-21 23:03:58

您还可以通过播放链接器指令文件来增加堆栈大小。

对于旧的MPLAB-C18 + MPLINK工具链,您可以为项目使用一个自定义链接器指令(lkr)文件,并指定堆栈大小如下:

代码语言:javascript
复制
 DATABANK   NAME=stackregion   START=0xB00       END=0xEFF

看起来这个编译器已经被XC8取代了,但是如果更新的工具链没有提供类似的特性,我会感到惊讶。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28077151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档