я так и не понял, о чем тут идет спор... если достаточно ресурсов (а я догадываюсь, их достаточно), то что может быть проще ранее рекомендованного strcmp?
Код:
if(strcmp(command, "CLR") == 0){ // обработка команды CLR } else if(strcmp(command, "PRINT") == 0{ // обработка команды PRINT } else if .......
для avr-gcc рекомендую strcmp_P - меньше ресурсов flash тратится.
Добавлено after 3 minutes 12 seconds: можно, конечно, и красивее сделать - перебор структур из массива... но это на любителя, так тоже просто и удобно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Массив структур, в виде строки-команды и указателя на функцию-обработчик, как выше уже сказали - самое простое и красивое решение.
Да весь этот механизм в интерпретаторе бейсика уже есть и если проект открыт, то должно быть внятное описание как добавлять свои операторы. Только от ТС так и не узнали, что это за проект, на чем он написан, чем компилить.
Массив структур, в виде строки-команды и указателя на функцию-обработчик
ну я об этом и написал в дополнении... хотя не факт, что этот вариант будет компактнее и быстрее. я сталкивался с большим геморроем, когда реализовывал этот подход при помощи WinAVR, который данные во flash поддерживает не наивно для Си, а только путем работы с функциями чтения... такое не стану советовать. avr-gcc с версии, кажется, 4 уже поддерживает пространство памяти __flash, что позволяет реализовать описанный подход на самом деле элегантно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Человек хочет организовать внутреннюю шину данных для обмена между самостоятельными блоками единого устройства. Это городушка вроде северна/южна моста в ПК (ибо устройство по сути и есть самодельный эквивалент ПК). Ранее в пределах одного модуля (а за основу взят АРМ из группы ардуиновых) у него задачка решалась. Однако, поскольку использованы библиотеки-копипасты, а не самостоятельная разработка быстродействие результирующего устройства автора не устроило и он разделил его на самостоятельные функциональные блоки. А воть тут-то и вылезло... проблемо место... Ему бы не RS232 с асинхронным обменом делать, а позаботится хотя-бы об аппаратном варианте синхронизации обмена "запрос-ответ" да шину данных по-другому организовать. Ан нет - уперся в тот АППАРАТНЫЙ serial поскольку ИНЫХ ГОТОВЫХ БИБЛИОТЕК НЕТ. Ежли уж говорить о отловле команд по асинхроннику... Каждый модуль занят своей задачей. Отлов наличия каких-либо данных в буфере приемопередатчика производится в произвольное время (а сколько за тот промежуток времени туда нападало данных - это тоже вопрос). Ардуина готовность данных прерыванием (как в случае работы непосредственно с МК) не обозначает - гонит поток всего, что принимает через буфер (можно конечно и посложнее прожку соорудить - но то уже задача посильная ЗНАТОКУ, а не НАЧИНАЮЩЕМУ и выходит за рамки "стандартных"средств IDE). Посему ставится периодический контроль содержимого того буфера (что жреть время и ресурс). Сразу всплывает вопрос о обрамлении данных синхросимволами, дабы отличить случайно совпавшую комбинацию данных от команды. Да и ответ "соседнему" блоку о том, что данные обработаны, а не потеряны... Вобщем КАША...
Всем спасибо за помощь. Связать платы так и не получилось как следует. Пока ограничился постановкой команд на не используемый ряд верхних клавиш (F1-F12). Из плюсов - уяснил для себя много нового. Не в курсе сколько будет стоить подобная работа по "связке плат", если заказать это?
Сейчас этот форум просматривают: Just_Fluffy и гости: 25
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения