Чтение конфига, затем работа с выбранными файлами
- Войдите на сайт для отправки комментариев
Доброго дня.
Делаю один девайс, логика работы:
1. при включении считываем конфиг-файл с карты, пока так: num1=NAME1,03,05,14,22;num2=NAME2,.....
2. предусмотрено 8 разных пунктов меню (num1..8), в каждом своё имя (5 символов) и 4 двузначных (00..99) параметра, в девайсе есть 8 кнопок выбора одного из считанных вариантов (многократно, в процессе работы, в произвольном порядке)
3. в зависимости от выбранного варианта выводим на дисплей имя, параметры, и с этой же карты 3 изображения, имена которых: NAME1_.raw NAME1s.raw NAME1g.raw
4. соответственно числовые параметры (тоже свои для каждого варианта) используются в дальнейшей работе
Собственно вопрос в том, что не могу найти подходящий пример, где на основе считанных char[n] после происходило бы чтение файлов с этими именами.
Использую библиотеку UTFT, если заготовить все варианты заранее (#define name1 "NAME1", #define num1 "NAME1_.raw", ...), после компиляции всё работает, но при изменении вариантов придётся перепрошивать проц. Считать числа и засунуть их в массив проблем не вызывает. Изображения же пока получается формировать только через отдельные переменные (32 штуки - под каждое имя свою), и выводить через switch case, что достаточно громоздко. А можно ли создать и пользоваться массивом char, чтобы по номеру пункта меню сразу получать имена файлов? Так и не понял.
Не знаю, уместно ли упоминать, но String слишком прожорлив по сравнению с char array, в его сторону уже не смотрю, тормозит чрезмерно.
Я так и не понял, чего Вы хотите, но ответ в любом случае - можно.
И еще мне показалось, что Вы либо не представляете, либо плохо представляете себе, что такое массив. Почитайте, возможно, это как раз то, что Вам нужно.
Может и не понял )) Вот к примеру здесь:
Но это константы, а как мне организовать подобную работу с загружаемыми значениями? Нигде не нашёл примера работы с двумерным массивом char[][], чтобы можно было работать как с отдельными символами (прописывать из конфиг-файла), так и с полученными словами (читать файлы).
Да, можно запихнуть все слова в одну строку типа "NAME1NAME2NAME3..." и при необходимости создавать переменную с "NAMEn_.raw", но может быть есть иной способ, чтобы по номеру нажатой кнопки взять созданный при старте char[n] и загрузить нужный файл?
Способов всегда много - самых разных. В том числе и разных способов решить одну и ту же задачу.
Ну а выбор того или иного способа зависит от множества конкретных условий. В случае, когда приходится работать с весьма ограниченными возможностями МК, значение этих конкретных условий особенно велико. В принципе, можно порекомендовать отводить для каждого имени файла по 13 символов и хранить весь массив имен либо в общем массиве символов, либо в массиве массивов.
Может и не понял )) Вот к примеру здесь:
Но это константы, а как мне организовать подобную работу с загружаемыми значениями? Нигде не нашёл примера работы с двумерным массивом char[][], чтобы можно было работать как с отдельными символами (прописывать из конфиг-файла), так и с полученными словами (читать файлы).
да так же как с одинарными. Вы в одномерных разницу между const и просто массив понимаете? - так в чем же проблема?
В принципе, можно порекомендовать отводить для каждого имени файла по 13 символов и хранить весь массив имен либо в общем массиве символов, либо в массиве массивов.
Хорошо, создал я массив char names[88] (имя+расширение=10 и нуль-терминатор, и так 8 раз). При старте забил его именами из конфига, например: VOLGA_.rawØKAMAZ_.rawØZAPAR_.rawØ....... А дальше как? Понадобилось мне загрузить изображение, какой командой (или последовательностью команд) мне выцепить нужную подстроку, без манипуляций с побуквенным копированием в отдельную переменную char?
Пока вижу один путь (допустим выбран пункт меню i=2):
Вы примерно это имели в виду, или есть менее извращённый способ? ))
Я не программист по образованию, это часть моего хобби, пишу нужные мне программы довольно в лоб, используя в малопонятных местах найденные примеры, подгоняя их под себя в меру осознания. Делфи Паскаль для винды (полсотни программ), Си (десятки) и ассемблер (несколько) для МК - вроде бы опыт есть, но не глубокий. Если бы вы привели пример, или дали ссылку на почитать, я был бы более благодарен ))
ПС массив массивов погуглил, попадаются только примеры с числами, со строками не встретил...
Камень какой?
Пока вижу один путь (допустим выбран пункт меню i=2):
Вы примерно это имели в виду, или есть менее извращённый способ? ))
Есть и не один...
а) про циклы что-нибудь слыхали ? зачем вручную копировать каждую из 11 букв. если можно запустить цикл For ?
б) если у вас в конце каждой строки стоит терминатор '\0' - то вообще ничего никуда не надо копировать. Фактически ваша строка из 100 символов представляет 8 строк, записанных подряд.
Соответвенно указатель на строчку1 - это names. на строчку2 - это names+11 и так далее. Эти указатели можно использовать везде вместо самих строк. вообще ничего никуда не копируя
все гораздо проще:
Камень какой?
мега2560
Камень какой?
мега2560
дак чо ты паришься, используй String и не сы.
а) про циклы что-нибудь слыхали ? зачем вручную копировать каждую из 11 букв. если можно запустить цикл For ?
.....
все гораздо проще:
Про циклы не только слыхал, в данном случае просто не стал усложнять запись, да и при 5 копируемых (остальные повторяются) символах не вижу смысла его использовать - экономим несколько байт, но теряем несколько тактов ))
А вот за пример огромное спасибо! Теперь что-то проясняется ))
дак чо ты паришься, используй String и не сы.
Пробовал - тормозит. У меня вывод на экран идёт в loop, остальная работа - прерывания по таймеру (~20Гц). Пока все стринги не прибил, ловил глюки - то на экран кракозябры вылазят, то зависает. И это ещё не все обработчики написаны.
Чесно сказать? Это точно не из-за String.
Чесно сказать? Это точно не из-за String.
Ну да, тут дело в руках ))) но без стрингов перестало глючить. Да и везде предупреждают, что весьма ресурсоёмкая вестчь.
все гораздо проще:
Ёлки, насколько всё просто работает!! И ведь везде похоже пишут, но не доходило, пока на живом, близком примере не увидел! Что-то вдруг в мозгу щёлкнуло и понял )))
Спасибо ещё много раз!!
Чтобы не оставить впечатление полного ламера, вот половинка моего девайса, стадия готовности не более 10% ))
Первый раз заморочился с графикой и флешкой, предыдущие поделки обходились 1602/2004/7сег, поэтому вопросов со строками никогда не возникало.