我是C和微控制器的新手,我正在尝试通过复制网上找到的项目来学习。 在这里,我有一个在与硬件(PIC32MX534F064H)相同的硬件上创建的项目,并且我基本上是将语法从mikroC转换为我正在使用的微芯片编译器(XC32 v1.34)。我为此使用MPLab IDEX。
在这个项目中,我试图定义一个大的(32000)无符号整数向量,并且编译器向我抛出错误,我认为该向量对于设备而言太大。由于该项目在相同的硬件上工作,但不是在mikroC中,因此不是这种情况。
我试图减小向量的大小,一个3200大小的向量可以完美地编译,所以我认为这与向量的大小有关,而不是语法。
我搜索了几个小时,查看了数据手册,发现对于较小的图片,有一种设计大型阵列的特定方法,但是没有关于PIC32的文档。
所以当我这样定义我的向量
#include <p32xxxx.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <xc.h>
#include <plib.h>
signed int data[32000];
编译器把这个扔给我
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl'
failed /Applications/microchip/xc32/v1.34/bin/bin/gcc/pic32mx/4.5.2/../../../..
/bin/xc32-ld: dist/default/production/LED.X.production.elf section
`.bss' will not fit in region `kseg1_data_mem'
/Applications/microchip/xc32/v1.34/bin/bin/gcc/pic32mx/4.5.2/../../../..
/bin/xc32-ld: Link terminated due to previous error(s).
现在,我不知道下一步该怎么做,所以..任何帮助表示赞赏。
答案 0 :(得分:3)
从device overview可以明显看出,所讨论的MCU是32位(“ 80MHz / 105DMIPS,32位MIPS M4K内核” ),因此signed int
也是32位宽程序内存限制为64 KiB(“ 64K RAM(可以从RAM执行)” ),但是您正试图分配32000 * 4字节的数组。
数组元素的short
怎么样?
请注意,如果程序可以从闪存执行,则可能要确保程序也不会加载到RAM中,否则,不会留有太多空间。