Я не прибедняюсь. Если бы сам мог разобраться, то не создавал бы тему и не спрашивал. К сожалению в документации на библиотеку я не могу пока найти ответ. Уже смотрел даже на код функции ls(), которая выводит листинг всех файлов.
Так вроде в правильную сторону глядите. У функции этой и флаг есть для рекурсивного обхода. Т.е. весь код уже есть готовый. Нужно сделать её аналог, не печатающий ничего в сериал, а только штуки считающий.
Вы издеваетесь? Спрашиваете совета по коду, при этом часть его не показываете?
Совершенно очевидно, что раз вы задаете вопрос по коду - значит не до конца понимаете, как он работает. А значит не можете судить, какие части кода важны, а какие нет. Поэтому запомните - код всегда надо приводить ПОЛНОСТЬЮ.
Смотря что за структура и как она объявлена.
Например я вот здесь:
использовал глобально объявленную структуру в процессе рекурсии.
Но вообще, для каждого уровня рекурсии должен быть свой отдельный набор данных, например, та же структура. Иначе следующий уровень будет затирать данные предыдущего уровня, что сделает невозможным возврат из рекурсии.
Из соображений Всеобщей Гармонии такого быть не должно.
Манипуляции с регистром символов - это совсем не задача для библиотеки работы с накопителем.
Продолжаю изучать библиотеку SdFat. Назрела еще одна проблема и я пока не вижу лёгкого пути для её решения. Может кто-то подскажет мне?
Проблема в сортировке файлов и имен папок по алфавиту. Естественно, что при записи данных на карту памяти, данные пишутся в свободные ячейки последовательно. И при открытии файлов командой
openNext()
также последовательно и находятся файлы на карте. А хотелось бы получить сортировку по алфавиту.
В моём проекте в Arduino Uno/NANO нет просто памяти, для хранения всех имен папок и последующей сортировки программным методом.
Хочу услышать Ваши предложения. Я могу просто не знать какой-то мелочи и все окажется вполне решаемо.
Выбирайте инструмент по задаче. Нет памяти - забывайте про всякие папки, длинные пути, а то и вообще про файловые системы. Вы не за домашним компьютером! Если всё это нужно - берите контроллер с достаточными ресурсами.
С этим спорить не буду. Но вышло так, что есть готовая железка, а прошивка мне не то, чтобы не нравится, но она еще у меня с ошибками работает. Намучавшись, решил написать свою. Времени потратил много на изучение, подошел, фактически, к финишу. Но вот сегодня столкнулся с тем, что прошивка считывает папки не по порядку и, разобравшись, понял почему. Теперь вот раздумываю, оставить как есть, или еще можно побарахтаться и спасти ситуацию? Реально 90% флэш памяти уже занято в ATmega328.
А если не секрет, что это всё-таки за изделие? Интересно, какой задаче необходима сортировка файлов и папок. На мой взгляд, сортировка нужна только человеку, т.е. в каком-то пользовательском интерфейсе. Логично, что в условном проводнике нам легче найти в списке конкретный файл, если список как-то упорядочен.
Но зачем это нужно микроконтроллеру - не представляю.
Не измеряли, сколько времени занимает просмотр папки при помощи openNext() ?
Может вас устроит это время? Тогда не сортируете, а просто ищите каждый раз заново следующий по порядку файл.
Вы всерьез считаете, что сортировка строк относится к задачам файловой системы?
В любой ОС файлы выдаются “как есть”, а сортировка, если она нужна - дело прикладной программы?
Так если ее нет, откуда она возьмется у драйвера файловой системы? Вы полагаете, что у него есть доступ к какому-то секретному пулу памяти, к которому Вас не допускают?
А тут извечная дилемма: по какому критерию оптимизировать - по памяти или по скорости. На Ардуино принято по памяти.