在ARM微控制器中编写C程序,当我尝试在2D数组中分配值时出现硬故障,我完全不知道为什么会发生这种情况
#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);
}
感谢
答案 0 :(得分:1)
您可能导致堆栈溢出。你要求至少76K的堆栈;嵌入式系统可能有更像3K的可用堆栈。
查阅正在使用的操作系统的文档(或者编写一些探测代码并将其与链接器映射中的内容进行比较等),以确定实际可用的堆栈数。
与此同时,如果您创建此数组static
,那么如果它对于静态数据区域来说太大,则会出现链接错误。你可以使用比特而不是bool来节省至少7/8的空间。