u-235 / ums

Universal Modulary Simulator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Universal Modulary Simulator

UMS -- это среда для точной симуляции нескольких цифровых устройств одновременно. Обычно симуляторы пишутся под один класс устройств и синхронизация процессов в симуляторе строится вокруг только этого устройства. Основное отличие UMS состоит в том, что каждая итерация симуляции зависит от состояния всех подключенных устройств.

Базовые идеи

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

  • perform -- устройство делает изменения внутреннего состояния, однако эти изменения не видны для других устройств.
  • latch -- изменения, сделанные в предыдущем этапе, становятся видны для других устройств. Обновляется переменная coming.
  • notify -- устройство делает уведомления о изменениях, если это заложено в логику работы. Любое устройство, даже не участвовавшее в итерации, при получении уведомления может изменить переменную coming.

Переход к следующему этапу происходит только после полного завершения текущего этапа. Это позволяет сравнительно легко организовать многопоточное выполнение этапов симуляции.

Зависимости

На данный момент для сборки нужна только стандартная библиотека C.

Сборка

mkdir build
cd build
cmake ../
cmake --build .

Версия 1

TODO

  • Документирование.
  • Тесты.
  • Поддержка многопоточности.
  • Загрузка конфигурации из XML.
  • Унификация механизма создания объектов различных классов.
  • ums_simulator_install(char *name) - создание симулятора по имени.
  • Доделать сигналы в UmsDevice.
  • Сделать выводы IO в UmsDevice.
  • Убрать создание дефолтного устройства из UmsDevice.
  • Расширить типы в UmsValue: нужны массивы не только byte.

About

Universal Modulary Simulator

License:GNU General Public License v3.0


Languages

Language:C 99.3%Language:CMake 0.7%