新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2017-5-31
- 在线时间
- 1 小时
|
1金钱
实现功能:在while循环里检测是否挂载成功,成功后扫描根目录,将结果打印到串口上,同时打印SD卡空间
在main函数里实现的代码:
while (1)
{
if (FR_OK != res)
{
res = f_mount(&(fs[0]), "0:", 1);
Delay_s(1);
}
if (FR_OK == res)
{
Delay_ms(200);
mf_scan_files("0:");
Delay_ms(200);
mf_showfree("0");
}
}
自己修改的mf_scan_files函数,其中_USE_LFN = 2, 使用堆栈的方式
全局变量也做了相应修改
FATFS fs[_VOLUMES]; //逻辑磁盘工作区.
FIL file; //文件1
FIL ftemp; //文件2.
UINT br, bw; //读写变量
FILINFO fileinfo; //文件信息
DIR dir; //目录
void mf_scan_files(u8* path)
{
FRESULT res;
char *fn; /* This function is assuming non-Unicode cfg. */
#if _USE_LFN
TCHAR lbuf[_MAX_LFN + 1];
fileinfo.lfsize = _MAX_LFN + 1;
fileinfo.lfname = lbuf;
#endif
res = f_opendir(&dir, (const TCHAR*)path);
if (res == FR_OK)
{
while(1)
{
res = f_readdir(&dir, &fileinfo);
if ( (res != FR_OK) || (fileinfo.fname[0] == 0) )
{
break;
}
#if _USE_LFN
fn = *fileinfo.lfname ? fileinfo.lfname : fileinfo.fname;
#else
fn = fileinfo.fname;
#endif
if (fn[0] == '.')
{
continue;
}
printf("%s/", path);
printf("%s\r\n", fn);
}
}
else
{
printf(" ------ mf_scan_files fail -------\r\n");
}
}
实现现象:
串口打印结果
------ Mount Fail ------ <每次都会出现>
?------ Mount Success ------
0:/?怣SDOS.5.0 <第一次扫描的时候会打印一堆乱码出来>
0:/2.txt
0:/幯拣{庂?
0:/f?|&f;.&妛
0:/fFV.f
0:/肏黧F?.N?
0:/at2Nt 兦;?
0:/?
0:/;
0:/JJ奆
2澉.?f
0:/吟鰬黯b?树v
0:/嬼奦$?a.ar
0:/癰ootmgr
0:/hermedi.a. |
最佳答案
查看完整内容[请看2#楼]
首先感谢原子哥的解答
今天重新移植后问题解决了
问题原因diskio.c里的disk_read和disk_write接口没有写好,原子哥提供的例子是在底层的读写函数里等待操作完成,而我是用的DMA中断的方式,在实现接口里没有查询DMA是否操作完,导致底层IO操作还没完成就进行后续操作,从而导致失败
|