pokk 0 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба Добрый день, сделаю запись на sd, через sdio, бывают моменты что что запись(в SDIO) вешала все, сейчас все более менее отладил, и такие моменты исключил, но все же, После "зависона" таймауту выходим, и из функции f_write выдается ошибка, как теперь правильно повторить, запись (можно в другой сектор), т.е дозапись в файл те данные которые не правильно записались. 1) зациклить функцию f_write, но там надо у fp сбросить ошибку, такое(fileW.err=0;) как-то не правильно, как сделать правильно ? do{ fileW.err=0; file_close=f_write(&fileW, &inbuf[0], 512, (void *)&bw); if(file_close!=FR_OK){ NOP; } }while(file_close!=FR_OK); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба 4 часа назад, pokk сказал: такое(fileW.err=0;) как-то не правильно, как сделать правильно ? Правильно - найти причину ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба 4 часа назад, pokk сказал: Добрый день, сделаю запись на sd, через sdio, бывают моменты что что запись(в SDIO) вешала все, сейчас все более менее отладил, и такие моменты исключил, но все же, После "зависона" таймауту выходим, и из функции f_write выдается ошибка, как теперь правильно повторить, запись (можно в другой сектор), т.е дозапись в файл те данные которые не правильно записались. 1) зациклить функцию f_write, но там надо у fp сбросить ошибку, такое(fileW.err=0;) как-то не правильно, как сделать правильно ? Люблю программистов. Чтобы понять как что-то сделать правильно нужно для начала понимать что мы делаем. Об этом не слова. Можно только предположить что мы должны получить отказоустойчивую запись на плохую флешку. Задача мягко говоря странная. В такие задачи ставят хорошие флешки и желательно не одну. Но если решать как есть то алгоритм я вижу примерно так: 1. Пробуем запись. Если получилось то выходим. Если нет идём дальше. 2. Отмечаем как-то блок как повреждённый. 3. Проверяем есть ли у нас свободные блоки. Если нету то выходим с ошибкой записи. 4. Выбираем следующий блок и переходим к пункту 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба 8 часов назад, MegaVolt сказал: 1. Пробуем запись. Если получилось то выходим. Если нет идём дальше. 2. Отмечаем как-то блок как повреждённый. 3. Проверяем есть ли у нас свободные блоки. Если нету то выходим с ошибкой записи. 4. Выбираем следующий блок и переходим к пункту 1. Этим должен заниматься контроллер NAND внутри SD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба 8 hours ago, jcxz said: Правильно - найти причину ошибок. Именно. А если уж паче чаяния ошибка случилась, то правильно будет просто известить об этом пользователя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться