Показать сообщение отдельно
  #9 (permalink)  
Старый 12.11.2017, 08:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Lion777
как разбирать все эти команды без кучи if'ов
Знать бы для чего все это пишется. Может быть почитать об архитектуре микроконтроллеров, например от Microchip? Например, для семейства PIC16C5X длина инструкции составляет 12 бит, которые разделены на тип команды и на операнды. Операнды, это регистры, биты или байты (для бит или байт ориентированных команд).

За небольшим исключением команды этого семейства выполняются за один командный цикл. Команды проверяющие условия или изменяющие программный счетчик выполняются за два командных цикла. При этом, имея небольшой набор команд могут нести на борту различные функциональные устройства, от таймеров, и АЦП, до связи по Интернет, что позволяет создавать на них самые различные устройства.

По такому же принципу и ваш контроллер должен работать. К примеру ваши команды занимают два бита в инструкции: 00 - выключить, 01 - включить, 10 - получить. Следующая пар бит определяет устройство: 00 - свет, 01 - вода, 10 - холодильник. И последняя пара, это помещение: 00 - комната, 01 - кухня, 10 - ванная.

Две последних пары бит в инструкции определяют адрес порта вывода - первая задает номер порта, вторая биты этого порта закрепленные за помещением. Например в комнате может иметься только устройство свет и для нее определен только один номер порта, в тоже время на кухне могут быть три устройства, и для нее отводится три номера порта вывода.

Дешифратор команд должен последовательно декодировать каждую и исполнять. В памяти программ команды идут одна за другой и нет никаких пробелов, но пусть у вас они будут представлены таким образом:

010001
011001

Дешифратор разбивает поток команд по \n, затем извлекает биты инструкции, например по шаблону рег. выражения. Далее выполнение - определить порт, установить/получить состояние порта. Если ваша задача вывести текст по команде, значит битовые значения можно преобразовать в десятичные, которые есть свойства объекта содержащие текст.

Какие либо if здесь не потребуются. Но если команда включить/выключить, это установить 1/0 на выходе указанного порта, то команда "получить", это считать состояние порта, передать его программе, которая и будет это состояние анализировать. А уже по результату может включать/выключать, запускать подпрограммы и т.д.
Ответить с цитированием