野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13755|回复: 3

显示BMP程序中调用f_open函数进入HardFault_Handler

[复制链接]
发表于 2014-11-26 14:45:34 | 显示全部楼层 |阅读模式
问题描述:显示BMP图片程序有错误,显示中文没问题
环境:iso—mini ,sdio驱动,fatfs文件系统

我的函数之前是
void Lcd_show_bmp(unsigned short int x, unsigned short int y,unsigned char *pic_name)
{
BYTE pColorData[960];                                       
FATFS bmpfs;
FIL bmpfsrc;
FRESULT bmpres;
UINT read_num;
。。。。。
f_read(&bmpfsrc,&bitHead,sizeof(tagBITMAPFILEHEADER),&read_num);        
f_read(&bmpfsrc,&bitInfoHead,sizeof(BITMAPINFOHEADER),&read_num);
//f_read(&bmpfsrc,pColorData,1,&read_num);
}
函数执行没有问题,读取的bmp信息正确。
把最后一行注释去掉后,程序会在 f-open 的 chk_mounted 函数调用后进入HardFault_Handler中断函数

解决办法:
把BYTE pColorData[960];                                       
FATFS bmpfs;
FIL bmpfsrc;
FRESULT bmpres;
UINT read_num;
定义成该.c文件下的全局变量,没有问题了。没怎么研究过fatfs,不知道这几个变量定义成全局和局部有什么区别。pColorData变量时存读取到的数据的,也必须是全局的才可以,搞不明白怎么回事

我掉用sd卡中中文字库的函数定义的就是局部变量,没有问题的,那个大神帮忙指导下是什么原因。


回复

使用道具 举报

发表于 2014-11-26 14:53:00 | 显示全部楼层
BYTE pColorData[960];                                       
FATFS bmpfs;
FIL bmpfsrc;
FRESULT bmpres;
UINT read_num;

应该是你这部分的数据太大,放在局部变量里的话,数据是存储在栈里的,栈空间不够大,就会hardfalterr
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-26 15:15:29 | 显示全部楼层
flyleaf 发表于 2014-11-26 14:53
BYTE pColorData[960];                                       
FATFS bmpfs;
FIL bmpfsrc;

刚开始我也这么认为的,把pColorDate全局,其他几个局部,这样比调用中文字库的小。运行结果不行
回复 支持 反对

使用道具 举报

发表于 2014-11-26 15:21:14 | 显示全部楼层
winkertoo 发表于 2014-11-26 15:15
刚开始我也这么认为的,把pColorDate全局,其他几个局部,这样比调用中文字库的小。运行结果不行

我记得fatfs也是很大的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 17:40 , Processed in 0.029320 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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