UMS -- это среда для точной симуляции нескольких цифровых устройств одновременно. Обычно симуляторы пишутся под один класс устройств и синхронизация процессов в симуляторе строится вокруг только этого устройства. Основное отличие UMS состоит в том, что каждая итерация симуляции зависит от состояния всех подключенных устройств.
Каждое устройство содержит переменную coming
, которая показывает время,
когда устройство должно сделать изменения. Симулятор в начале каждой итерации
просматривает переменные coming
всех устройств и выбирает самое маленькое
значение. Каждая итерация состоит из трех этапов, во время которых вызываются
соответствующие методы устройств с совпадающим временем.
perform
-- устройство делает изменения внутреннего состояния, однако эти изменения не видны для других устройств.latch
-- изменения, сделанные в предыдущем этапе, становятся видны для других устройств. Обновляется переменнаяcoming
.notify
-- устройство делает уведомления о изменениях, если это заложено в логику работы. Любое устройство, даже не участвовавшее в итерации, при получении уведомления может изменить переменнуюcoming
.
Переход к следующему этапу происходит только после полного завершения текущего этапа. Это позволяет сравнительно легко организовать многопоточное выполнение этапов симуляции.
На данный момент для сборки нужна только стандартная библиотека C.
mkdir build
cd build
cmake ../
cmake --build .
- Документирование.
- Тесты.
- Поддержка многопоточности.
- Загрузка конфигурации из XML.
- Унификация механизма создания объектов различных классов.
-
ums_simulator_install(char *name)
- создание симулятора по имени. - Доделать сигналы в
UmsDevice
. - Сделать выводы IO в
UmsDevice
. - Убрать создание дефолтного устройства из
UmsDevice
. - Расширить типы в
UmsValue
: нужны массивы не толькоbyte
.