Skip to content
/ ums Public

Universal Modulary Simulator

License

Notifications You must be signed in to change notification settings

u-235/ums

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published