野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28694|回复: 3

请教一下,关于跑到HardFault_Handler的问题。。。

[复制链接]
发表于 2013-6-5 16:28:54 | 显示全部楼层 |阅读模式
本帖最后由 冷月_清秋 于 2013-6-5 16:31 编辑

cuowu.jpg

出错后跑到这个位置
1.jpg
2.jpg

UINT8 buffer[512];    在不同位置时的编译结果。。

Program Size: Code=18580 RO-data=176124 RW-data=124 ZI-data=3940(定义到外部是这里大了不少)  
Program Size: Code=18576 RO-data=176124 RW-data=124 ZI-data=3428  (定义到内部时的结果,运行时但是会出错,但不会出警告和错误)


UINT8 textFileBuffer[] = "感谢您选用 野火STM32开发板 !^_^ \r\n";
UINT8 buffer[512];       // file copy buffer


extern void DisplayString(UINT16 x,UINT16 y,UINT8 *str);

int main()
{


UINT16 res,a;
UINT16 br, bw;           // File R/W count
s_TxtColor=RED;
s_BackColor=BLUE;
SysTick_Init();

USART1_Config();
printf("\r\n -------RS232初始化成功------\r\n");
LCD_Init();

。。。。。。。。
}
如果我把UINT8 buffer[512];     定义在main函数内部,一定跑到HardFault_Handler位置处,如果定义到外部就不会,不解,谁帮忙解释一下,不胜感激。

对了,除了这里有问题,其他都正常了,现在通过把字库拷贝到SD卡上显示汉字和英文都没问题。。

SD卡驱动有点复杂,暂时没做研究,以前用51时用SPI驱动,习惯了,用sdio感觉好陌生。。


回复

使用道具 举报

发表于 2013-6-5 18:35:25 | 显示全部楼层
把你的堆栈搞大一点试试看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 20:28:08 | 显示全部楼层
请教,如何调整堆栈,对STM不太熟悉,谢谢。。
回复 支持 反对

使用道具 举报

发表于 2014-1-21 10:30:34 | 显示全部楼层
如果定义到main()函数里面的话属于局部变量,如果放在main()函数外面属于全局变量。全局变量开始就会分配空间,而局部变量在程序运行中动态分配空间。由于你的数组较大,在程序运行中动态分配的空间不够就占用全局变量的空间,更改全局变量的值,如果全局变量值决定数组的大小,就会造成数组越界,数组越界就会造成死机。
建议在程序中局部变量数组大小最好不要超过10.
程序死机一般有两种状况:1、数组越界;2、野指针。不考虑程序中没喂狗情况哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 15:42 , Processed in 0.074316 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表