0

我正在尝试使用 f_write 函数形式的 FatFs libery 在循环中将大量文件保存在 SD 卡中,不幸的是,在最多 50 个循环条目后 f_write 返回 FR_DISK_ERR。

做一个测试花了 30 多分钟,所以我做了 Enity Test,在 SD 卡上保存了 10,000 个文件,程序仍然保存 < 50 个文件。

for(uint16_t i = 0; i < 10000; ++i){

    if(f_mount(&mfs,"0:",0) != FR_OK){

        to_int.put_str("Mount error");
        break;

    }

    if(f_chdrive("0:" ) != FR_OK){

        to_int.put_str("Oper error");
        break;

    }

    sprintf(f_name, "test%d.txt", i);
    if(f_open(&fil, f_name, FA_WRITE | FA_CREATE_ALWAYS)!= FR_OK){

        to_int.put_str("Write error");
        break;

    }

    if(f_write(&fil, wtext, sizeof(wtext), (void *)&wbytes) != FR_OK){ //<------FR_DISK_ERR

        to_int.put_str("Write Error\n");
        break;

    }

    f_sync(&fil);
    f_close(&fil);
    f_mount(0, "0:", 0);

    to_int.put_str(f_name);\
    to_int.put_str(" writed!\n");

}
4

1 回答 1

0

所以看起来这可能是一个堆栈大小问题,特别是如果您可以在 50 处重复此操作。您将堆栈大小配置为多少?如果您没有足够的堆栈空间,ST 使用的第三方 FATFS 在读取和写入大量文件时会出现问题。

增加你的堆栈大小,它应该可以正常工作。

于 2019-04-13T02:14:12.363 回答