STM32F429, FatFs, f_write. Создание большого количества файлов в цикле с помощью f_write после нескольких записей FR_DISK_ERR - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь сохранить много файлов на SD-карте в цикле с помощью функции f_write из FatFs libery, к сожалению, после максимум 50 записей цикла f_write возвращает FR_DISK_ERR.

Выполнение одного теста заняло более 30 минут, поэтому я сделал Enity Test, который сохраняет 10000 файлов на SD-карте, программа все еще сохраняет <50 файлов. </p>

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 голосов
/ 13 апреля 2019

Похоже, что это может быть проблемой размера стека, особенно если вы можете повторить это прямо на 50. На что настроен ваш размер стека?Сторонние FATFS, используемые ST, имеют проблемы при чтении и записи большого количества файлов, если у вас недостаточно места в стеке.

Увеличьте размер стека, и он будет работать нормально.

...