海底001 2022-03-19 15:21 采纳率: 33.3%
浏览 17

定义一个75Kb的全局或者局部数组报错或者无现象,如何解决?(c语言,32)

我想实现读取SD卡bin文件到LCD,于是定义了一个buff【320*240】,也就是75Kb,我的板子103ZET6内存64Kb,把数组定义才全局或者局部产生了以下问题:
1:、buff定义在全局时编译没有问题,打印元素地址就会报错如图

img


猜想求证:buff定义在全局里,存在ram里,因为大于ram内存64Kb,所以系统才报错?那为何编译不打印地址时候时,不报错?
代码:
#include "bsp_usart.h"
#include "stdio.h"
u8 buff[76800] = {0,1,2};
int main(void)
{
LED_Config();
Delay_Config();
USART_Config();
printf("buff[] = %d\r\n",sizeof(buff));
// printf("地址buff[0] = %p\r\n",(&buff[0]));
printf("地址buff[1] = %p\r\n",(&buff[1]));
// printf("地址buff[2] = %p\r\n",(&buff[2]));
while(1)
{ //灯
PBout(1) = 1;
Delay_ms(500);
PBout(1) = 0;
Delay_ms(500);
}
}

2、我把buff定义才main内部,编译没有问题,运行时候为什么代码会卡在定义buff那行过不去?
代码:#include "bsp_usart.h"
#include "stdio.h"

int main(void)
{
u8 buff[76800] = {0,1,2};
LED_Config();
Delay_Config();
USART_Config();
printf("buff[] = %d\r\n",sizeof(buff));
printf("地址buff[0] = %p\r\n",(&buff[0]));
printf("地址buff[1] = %p\r\n",(&buff[1]));
printf("地址buff[2] = %p\r\n",(&buff[2]));
while(1)
{ //灯
PBout(1) = 1;
Delay_ms(500);
PBout(1) = 0;
Delay_ms(500);
}
}

诚心请教,谢谢啦!

  • 写回答

2条回答 默认 最新

  • qllaoda 2022-03-19 16:10
    关注

    1,内存越界,后果无法预料,可能是你说的前一种情况下,还没有访问到越界的部分而已,但不同编译器可能有不同的内存分配方式,换个编译器可能又是另外的结果。
    2,定义在main内部就是局部变量了,局部变量占用的是栈,定义变量的语句不是执行语句,只是进main的时候发生了栈溢出,所以停在了main的入口。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月19日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)