2019-07-20 14:42发布
zuozhongkai 发表于 2017-5-6 17:29 都提示你“write error”了!检查什么情况下输出write error!然后调试代码
最多设置5个标签!
我单独测试读写sd卡都是没有问题的
Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_020别再让我为你受折磨.mp3");
Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_021别再让我为你受折磨.mp3");
Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_022别再让我为你受折磨.mp3");
上述复制三个文件,最后使用电脑读取并播放,完全没有任何问题
复制函数如下:
FRESULT Fatfs_FileCopy(const char *Source_address, const char *Create_target_file)
{
#if 1 // 使用外部 sdram 作为 缓冲测试
FATFS *fatfs_1, *fatfs_2;
FIL *fsrc,*fdst;
FRESULT res; // FatFs 函数公共结果代码
UINT br, bw; // 文件读/写字节计数
uint8_t * RWbuf;
fsrc = (FIL *)mymalloc(SRAMEX, sizeof(FIL)); // 使用外部 sdram 作为缓存
fdst = (FIL *)mymalloc(SRAMEX, sizeof(FIL));
fatfs_1 = (FATFS *)mymalloc(SRAMEX, sizeof(FATFS));
fatfs_2 = (FATFS *)mymalloc(SRAMEX, sizeof(FATFS));
RWbuf = (uint8_t *)mymalloc(SRAMEX, 4096);
f_mount(fatfs_1, Source_address, 0); // 注册工作区
f_mount(fatfs_2, Create_target_file, 0);
res = f_open(fsrc, Source_address, FA_OPEN_EXISTING | FA_READ); //打开存在的源文件,如果没有则返回错误
if(res)
printf("打开源文件错误 = %d.. ... ? ", res);
res = f_open(fdst, Create_target_file, FA_CREATE_ALWAYS | FA_WRITE); //打开目标文件,如果没有则创建
if(res)
printf("打开目标文件错误 = %d.. ... ? ", res);
// 拷贝源文件到目标文件
for (;;)
{
res = f_read(fsrc, &RWbuf[0], (4096), &br);
if (res || br == 0) break; // 文件结束错误
res = f_write(fdst, &RWbuf[0], br, &bw);
if (res || bw < br) break; // 磁盘满错误
}
// 关闭打开的文件
res = f_close(fsrc);
if(res)
printf("关闭源文件错误 = %d.. ... ? ", res);
res = f_close(fdst);
if(res)
printf("关闭目标文件错误 = %d.. ... ? ", res);
f_mount(NULL, Source_address, 0);
f_mount(NULL, Create_target_file, 0);
myfree(SRAMEX,fsrc); //释放内存
myfree(SRAMEX,fdst); //释放内存
myfree(SRAMEX,fatfs_1); //释放内存
myfree(SRAMEX,fatfs_2); //释放内存
myfree(SRAMEX,RWbuf); //释放内存
}
一周热门 更多>