OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9722|回复: 6

FAT问题

[复制链接]

6

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-1-13
在线时间
0 小时
发表于 2012-2-14 09:33:35 | 显示全部楼层 |阅读模式
 
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h" 
#include "lcd.h"
#include "flash.h"
#include "mmc_sd.h"
#include "fat.h"
//Mini STM32开发板范例代码24
//汉字显示 实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com

int main(void)
{
    u16 cot;
FileInfoStruct *file;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化     
LCD_Init(); //初始化液晶   
LED_Init();         //LED初始化
SPI_Flash_Init(); //SPI FLASH初始化 
if(SD_Init())  LCD_ShowString(60,20,"SDT  ERROR");
if(FAT_Init()) LCD_ShowString(60,40,"FAT  ERROR");
cot=1;  //查找SD卡根目录 的第cot个txt文件,并通过串口打印出来
Get_File_Info(FirstDirClust,file,T_TXT,&cot);
printf("文本名:%s\n",file->F_ShortName);
}
  下载到板子后通过串口知道 这个程序会死在Get_File_Info(FirstDirClust,file,T_TXT,&cot)这个函数中 所包含的CopyDirentruyItem(FileInfoStruct *Desti,direntry *Source)函数中,

void CopyDirentruyItem(FileInfoStruct *Desti,direntry *Source)
{
u8 i;
u8 t;
printf("进入CopyDirentruyItem");
for(i=0;i<8;i++) Desti->F_ShortName=Source->deName;//复制短文件名
printf("过了一个");
            ..........
}

而我看原子的综合测试例程 电子书部分 的代码却能成功进入此函数......菜鸟学FAT有一段时间了...连个查查看SD卡根目录都不行....求指点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-1-13
在线时间
0 小时
 楼主| 发表于 2012-2-14 09:48:39 | 显示全部楼层
就是查不出是什么问题...编译不报错,没警告.........下到板子上就是死在CopyDirentruyItem(FileInfoStruct *Desti,direntry *Source)函数中
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-14 09:59:29 | 显示全部楼层
FileInfoStruct *file; 
没分配内存.
导致内存溢出引起HARD FAULT.
改为:
FileInfoStruct file; 
调用的时候,用&file.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-1-13
在线时间
0 小时
 楼主| 发表于 2012-2-14 10:44:53 | 显示全部楼层
原子哥好样的!!!知道了,果然是那个问题........原子哥想你学习了!!要回去好好学C语言了.....
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-1-13
在线时间
0 小时
 楼主| 发表于 2012-2-14 14:53:05 | 显示全部楼层
原子哥,我回去看了看你的综合测试程序,Read_Book程序中你也是FileInfoStruct *FileInfo;这样定义的!!!!再者File_Browse程序中你也是这样定义的!!!你的却也没问题,也不会内存溢出.......也都用了Get_File_Info(......)函数。
void Read_Book(FileInfoStruct *FileName);  
//文本浏览器(.txt/.c/.h/.lrc)   
//支持FAT32/16文件系统的浏览.  
void Ebook_Play(void)
{  
FileInfoStruct *FileInfo;    
u16 index=0;  //当前选择的文件编号    
//从根目录开始浏览
if(FAT32_Enable)Cur_Dir_Cluster=FirstDirClust;//根目录簇号
  else Cur_Dir_Cluster=0;    
Fat_Dir_Cluster=Cur_Dir_Cluster;//父目录就是当前目录
while(1)
{   
POINT_COLOR=RED;    
Load_Gui_Bro("选择");//显示GUI界面
Show_Str(88,2,"电子图书",16,0x01);//叠加模式,非自动换行

index=File_Browse(T_LRC|T_TXT|T_C|T_H);//浏览文件夹    
if(!index)return;//结束浏览,退出此功能!!!!!
     
Pen_Point.Key_Sta=Key_Up;         //释放显示期间的触发     
FileInfo=&F_Info[0];//开辟暂存空间.  
Get_File_Info(Cur_Dir_Cluster,FileInfo,T_LRC|T_TXT|T_C|T_H,&index);//得到这张图片的信息   
Read_Book(FileInfo);//读取TXT文件      
}
}

u16 File_Browse(u32 file_type)
{  
FileInfoStruct *FileInfo;
u16 folder_cnt;//文件夹的个数
u16 des_cnt;   //目标文件的个数     
u8 fcnt;    //显示的文件数目
u16 temp;          

u16 total_file;//总文件数目
u16 pos_cnt;//当前文件号 1~folder_cnt+des_cnt
u8 key;      
      
Reset:     
POINT_COLOR=BLUE;          //蓝色笔头使用
folder_cnt=0;des_cnt=0;fcnt=0;key=0;pos_cnt=0;  
Get_File_Info(Cur_Dir_Cluster,FileInfo,T_FILE,&folder_cnt);//得到当前目录下文件夹的个数     
Get_File_Info(Cur_Dir_Cluster,FileInfo,file_type,&des_cnt);//得到当前目录下目标文件的个数  
   
total_file=des_cnt+folder_cnt;//总的文件数目=文件夹数目+目标文件数目
while(1)
{
if(pos_cnt<total_file)//文件标尺,未到达文件末尾
{    
               ..............
              ..............>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-14 16:28:16 | 显示全部楼层
请注意这句话:FileInfo=&F_Info[0];//开辟暂存空间.   
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-1-13
在线时间
0 小时
 楼主| 发表于 2012-2-14 17:49:23 | 显示全部楼层
原来如此,多谢原子哥耐心讲解!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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