2014-10-23 1 views
0

ARM 마이크로 컨트롤러에서 C 프로그램을 작성하면 2D 배열에 값을 할당하려고 할 때 하드 오류가 발생하며이 문제가 발생하는 이유는 전혀 없습니다.2D 배열에서 값을 assing 할 때 하드 폴트 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

루프 주위에 bracebrackets이 필요합니다. – Yetti99

+3

@TheParamagneticCroissant,주의 깊게 살펴보면 그의 치수와 인덱스가 실제로 제대로 정렬되어 있음을 알 수 있습니다. –

+4

컴파일러가'bool'을 어떻게 저장하는지에 따라 그 배열은 ~ 75K와 ~ 300K 사이의 스택 공간을 소비합니다. 너의 스택이 충분히 큰가요? –

답변

1

당신은 아마 스택 오버 플로우를 일으키는 원인이된다. 최소 76K 스택을 요청합니다. 임베디드 시스템에는 3K 이상의 사용 가능한 스택이 있습니다.

사용중인 운영 체제에 대한 설명서를 참조하십시오 (또는 일부 검사 코드를 작성하여 링커 맵 등에있는 것과 비교). 실제로 사용할 수있는 스택의 양을 계산하십시오.

그 사이에이 배열을 static으로 만들면 정적 데이터 영역에 비해 너무 큰 경우 링크 오류가 발생합니다. 그리고 bool 대신에 비트를 사용하여 최소한 7/8 공간을 절약 할 수 있습니다.

+0

[아마도 관련 링크] (http://www.support.code-red-tech.com/CodeRedWiki/StackSize) dev 도구. 그렇지 않다면 사용중인 설정에 대한 유사한 문서가 있어야합니다. –

+0

문제는 실제로 스택 크기였습니다. 해결 된 함수 외부에서 선언을 이동하여 메모리 제한을 초과하면 컴파일시 경고 메시지가 나타납니다. 감사! – Bobisnotyouruncle