Виртуальная машина и байт код
Часто требуется делать большие последовательности сложных операций —
например полетное задание для робота. Да, можно запихать все это дело в
основную программу, но вдруг что-то пойдет не так как надо и алгоритм
надо будет переделать — придется переделывать всю программу.
Тут на помощь придет виртуальная машина. Суть в чем — в памяти
контроллера, в основную программу, занесены основные процедуры
управления устройством. Если это робот, то это могут быть такие простые
команды как “вперед”, “назад”, “повернуть” и так далее.
Дальше мы увязываем это все в таблицу переходов, где у каждой команды
будет номер-смещение.
Потом нам нужен обработчик скриптов, который бы брал откуда нибудь,
нашу последовательность действий — скрипт и преобразовывал это в вызовы
реальных кусков кода -микрооперации.
Обработчик скриптов может быть той же самой задачей диспетчера,
запущенной фоном. А откуда он будет брать данные неважно. Их вполне
можно засасывать по usart или тащить из EEPROM памяти. А можно загнать
на IIC память и получится сменный картридж :)
В простейшем случае, обработчик скрипта хватает байт-код из источника и
сразу же заправляет его на конвейер, где микрооперация выполняется также
как и обычная задача. А чтобы очередь диспетчера не переполнялась можно
сделать так, чтобы новая партия байт-кода бралась только тогда, когда
прожуется первая. Для этого достаточно, чтобы обработчик скрипта
запускался по завершении каждой микрооперации.
В более продвинутой системе в байткоде могут быть и переменные. Тогда
обработчик скрипта должен анализировать код, хотя бы по свитчу.