无法在 PIC32 中定义大数组?

标签 c microcontroller pic32

我是 C 和微 Controller 的新手,我正在尝试通过复制我在网上找到的项目来学习。 在这里,我有一个在与我 (PIC32MX534F064H) 相同的硬件上创建的项目,我基本上是将语法从 mikroC 翻译成我正在使用的微芯片编译器 (XC32 v1.34)。我为此使用 MPLab IDE X。

在这个项目中,我试图定义一个大的 (32000) 无符号整数 vector ,编译器向我抛出一个错误,我认为这个 vector 对于设备来说太大了。事实并非如此,因为该项目在相同的硬件上工作,但在 mikroC 中。

我尝试降低 vector 大小,一个 3200 大小的 vector 可以完美编译,所以我认为这是关于这个 vector 的大小而不是语法。

我在谷歌上搜索了几个小时并查看了数据表,发现对于较小的图片,有一种设计大型阵列的特定方法,但没有关于 PIC32 的文档。

所以当我这样定义我的 vector 时

#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).

现在,我对下一步应该尝试什么一无所知,所以..感谢任何帮助。

编辑

我的信息确实是错误的,硬件已更新以处理这样的 vector ,而我并不知道。谢谢你的回答

最佳答案

来自device overview很明显,所讨论的 MCU 是 32 位的(“80MHz/105DMIPS,32 位 MIPS M4K 内核”),因此 signed int 也是 32 位宽。程序内存限制为 64 KiB(“64K RAM(可以从 RAM 执行)”),但您正在尝试分配 32000 * 4 字节的数组。

数组元素的 short 怎么样?


请注意,如果程序可从闪存中执行,您可能希望确保该程序不会也加载到 RAM 中,否则不会留下太多空间。

关于无法在 PIC32 中定义大数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55789502/

相关文章:

c - pic32mx230 spi 字节数

c - 我无法用 C 语言在文本文件中写入结构

c - 在 C 中为二叉搜索树分配内存的段错误

c - 寻找一种工具来告诉我 C 中的计算需要哪些整数宽度才不会溢出

c - AVR-GCC 刷入可执行文件什么都不做,直接刷入目标文件就可以了

c - 如何将 Pic32 从 sleep 模式唤醒?

c - 在 sprintf() 之前解析并替换 NaN 值

c - 从 'char*' 到 'char' 的无效转换 [-fpermissive]

c - 返回短整型不同基本类型 vc++ 错误

c# - 如何使用 C# 打开单个 Arduino 端口?