OpenEdv-开源电子网

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

关于fatfs的问题,单步调试的时候是好的,全速运行,就异常中断了。

[复制链接]

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
发表于 2015-3-10 13:07:48 | 显示全部楼层 |阅读模式
5金钱
wenjian_num = FileScan("wenjian");
/***********获取本机IP*************/
FileRead("0:sys.txt",buffer,60);


两句话调换位置的话,全速运行就会出现异常中断,要是单步就是好的,如果是以上的顺序就是好的。
下面是函数原型

BYTE FileScan(BYTE *path)
{
// FATFS fs;      // 建立一个文件系统         
//  FRESULT res;   // 存储函数执行结果
    FILINFO finfo;  // 存储文件状态信息
    DIR dir;   // 暂存路径
    TCHAR *fn;   // 暂存文件名
INT fileNum = 0;  // 初始化文件个数
INT size;   // 文件名长度
    f_mount(0, &fs);    // 加载文件系统
    res = f_opendir(&dir, (const TCHAR *)path);    // 打开路径目录
    if (res == FR_OK) // 路径打开成功
    {
    while (f_readdir(&dir, &finfo) == FR_OK)  //循环读取目录,直到读完 
    {
// #if _USE_LFN   // 长文件名
#if 0   // 长文件名
 fn = *finfo.lfname ? finfo.lfname : finfo.fname;
#else          // 短文件名
 fn = finfo.fname;
#endif
if((finfo.fattrib & AM_DIR)||(finfo.fattrib & AM_ARC))  //如果是文件夹(AM_DIR)、或是文件(AM_ARC) 

if(!fn[0])break; //如果读完,跳出循环    
size=strlen(fn); //获得文件名长度
if(finfo.fattrib & AM_DIR)flag[fileNum]=0; //判断如果是文件夹,给个标记  
if(finfo.fattrib & AM_ARC) //判断如果是文件
{
if(strcasecmp(&fn[size-3],type[0])==0)flag[fileNum]=1;//再次判断如果是bmp图片 //当前文件标志问置1
else if(strcasecmp(&fn[size-3],type[1])==0)flag[fileNum]=2;//如果是文本文档
else if(strcasecmp(&fn[size-3],type[2])==0)flag[fileNum]=3;//如果是exe文件
else if(strcasecmp(&fn[size-3],type[3])==0)flag[fileNum]=4;//如果是pdf文件
else if(strcasecmp(&fn[size-3],type[4])==0)flag[fileNum]=5;//如果是word文本文档
else if(strcasecmp(&fn[size-3],type[5])==0)flag[fileNum]=6;//如果是execl文件
else if(strcasecmp(&fn[size-3],type[6])==0)flag[fileNum]=7;//如果是zip文件
else if(strcasecmp(&fn[size-3],type[7])==0)flag[fileNum]=7;//如果是rar文件
else flag[fileNum] = 88; //当前文件标志问置2
}     
strcpy(FileN[fileNum],fn); //文件名复制给FileN数组保存
fileNum++;    //查找下一个,fileNum为总文件数
}  
    }  
    }

    f_mount(0, 0); // 卸载文件系统
    return fileNum; // 返回文件个数
}


FRESULT FileRead(const TCHAR *fileName, uint8_t *buf,u16 len)
{
u8 i;
// FATFS fs;              // 建立一个文件系统
//  FIL file;              // 暂存文件
UINT  br;              // 字节计数器
// FRESULT res;   // 存储函数执行结果

    f_mount(0,&fs);   // 加载文件系统

res = f_open(&file, fileName, FA_OPEN_EXISTING|FA_READ); // 打开文件

    if(res != FR_OK)  // 如果没有正确打开文件
    {
return res;  // 返回错误报告
    }
else  // 如果打开了文件
{
for(i=0;i<len/512;i++)
{
res=f_read(&file,buf,512,&br);
}
if(len%512)
{
res=f_read(&file,buf,len%512,&br);  
}
}
    f_close(&file);      // 关闭文件,必须和f_open函数成对出现
// GPIO1->DATA &= ~(1<<10);
    f_mount(0,0); // 卸载文件系统

    return res;
}



还有一个问题,路径什么时候前面需要加0:什么时候不需要完整的路径呢?

最佳答案

查看完整内容[请看2#楼]

FILINFO finfo;  // 存储文件状态信息     DIR dir;    // 暂存路径 放全局变量.再试试 然后,貌似没有不需要完整路径的时候....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-10 13:07:49 | 显示全部楼层
FILINFO finfo;  // 存储文件状态信息
    DIR dir;    // 暂存路径
放全局变量.再试试
然后,貌似没有不需要完整路径的时候....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
 楼主| 发表于 2015-3-11 08:49:44 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
是的啊,我就是在.c文件开头定义的,我也试过了,还是有问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-11 23:05:30 | 显示全部楼层
回复【3楼】wmh19910511:
---------------------------------
全速后,死在哪里?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
 楼主| 发表于 2015-3-12 08:46:55 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
全速以后这个不能判断死在哪里,只要在FileScan函数里面加了断点 就不会死,在这个函数外面的下一句加断点也不会死,不加断点就会死。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-12 23:12:50 | 显示全部楼层
回复【5楼】wmh19910511:
---------------------------------
你直接让他卡死,然后再点击红X,看看停在哪里.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
 楼主| 发表于 2015-3-12 23:19:39 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
异常中断里面。。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-12 23:27:27 | 显示全部楼层
回复【7楼】wmh19910511:
---------------------------------
加printf,协助分析.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 07:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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