STM32F429,FatFs,f_write。在多次输入FR_DISK_ERR之后,使用f_write在循环中创建大量文件

时间:2019-03-29 13:55:14

标签: c arm stm32 stm32f4 fatfs

不幸的是,我尝试使用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");

}

1 个答案:

答案 0 :(得分:0)

因此,这似乎可能是堆栈大小的问题,尤其是如果您可以在50时重复此步骤。那么您将堆栈大小配置为什么?如果您没有足够的堆栈空间,则ST所使用的第三方FATFS在读取和写入大量文件时会出现问题。

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