Не можете определить большой массив в PIC32? - PullRequest
1 голос
/ 22 апреля 2019

Я новичок в C и в микроконтроллерах, и я пытаюсь учиться, воспроизводя проекты, которые я нахожу в сети. Здесь у меня есть проект, созданный на том же оборудовании, что и у меня (PIC32MX534F064H), и я в основном транслирую синтаксис из mikroC в используемый мной компилятор микрочипа (XC32 v1.34). Я использую MPLab IDE X для этого.

В этом проекте я пытаюсь определить большой (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).

прямо сейчас, я не знаю, что мне следует делать дальше, поэтому ... любая помощь приветствуется.

EDIT

Моя информация действительно была неверной, аппаратное обеспечение было обновлено для обработки такого вектора, и я не знал об этом. спасибо за ваш ответ

1 Ответ

3 голосов
/ 22 апреля 2019

Из обзора устройства очевидно, что рассматриваемый MCU является 32-разрядным ( "80 МГц / 105DMIPS, 32-разрядное ядро ​​MIPS M4K" ), следовательно, signed int 32 бит в ширину тоже. Объем памяти программы ограничен 64 КБ ( "64 КБ ОЗУ (можно выполнить из ОЗУ)" ), однако вы пытаетесь выделить массив из 32000 * 4 байта.

Как насчет short для элемента массива?


Обратите внимание, что вы, вероятно, захотите убедиться, что программа также не загружается в ОЗУ, если она выполняется из флэш-памяти, иначе не останется слишком много места.

...