2014-10-23 2 views
0

Написание программы C в микроконтроллере ARM, я получаю жесткую ошибку, когда пытаюсь присвоить значение в 2D-массиве, и я не знаю, почему это происходитЖесткая ошибка при определении значения в 2D-массиве, C

#include "GLCD.h" 
#include <LPC17xx.H> 

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 


const size_t w = 319; 
const size_t h = 239; 


int main (void) { 

    bool univ[h][w]; 
    int x,y; 

    for (x = 0; x < w; x++) for (y = 0; y < h; y++) { 
     univ[y][x] = 1; 

    } 
    while (1); 
} 

благодарит

+3

Вам действительно нужны скобки вокруг ваших петель. – Yetti99

+3

@ TheParamagneticCroissant, если вы посмотрите внимательно, вы увидите, что его размеры и индексы действительно выстраиваются правильно. –

+4

В зависимости от того, как ваш компилятор хранит 'bool', этот массив будет потреблять от ~ 75K до ~ 300K пространства стека; ваш стек достаточно большой? –

ответ

1

Вы, вероятно, вызывает переполнение стека. Вы запрашиваете не менее 76 тыс. Стека; встроенные системы могут иметь нечто большее, чем 3K доступного стека.

Проконсультируйтесь с документацией по используемой операционной системе (или, возможно, напишите какой-нибудь пробный код и сравните его с тем, что находится в вашей карте компоновщика и т. Д. И т. Д.), Чтобы определить, сколько стека у вас действительно есть.

В то же время, если вы сделаете этот массив static, тогда вы должны получить сообщение об ошибке, если оно слишком велико для области статических данных. И вы можете сэкономить не менее 7/8 вашего пространства, используя биты вместо bools.

+0

[Возможно, релевантная ссылка] (http://www.support.code-red-tech.com/CodeRedWiki/StackSize), если вы используете Code Red dev. Если нет, то должна быть аналогичная документация для любой настройки, которую вы используете. –

+0

Проблема заключалась в размере стека, перемещая объявление за пределы функции, которую она разрешила, и теперь, когда я превышу пределы памяти, я получаю предупреждение при компиляции. Благодаря! – Bobisnotyouruncle

 Смежные вопросы

  • Нет связанных вопросов^_^