Имеется pci устройство, которое обрабатывает некоторые команды. Запись в него и чтение из него происходит через callback'и MemoryRegion'a. Формат команд абсолютно разный. При поступлении команды мы находим нужный обработчик, входим в него, далее необходимо выйти из него, чтобы получить данные, потом опять войти в обработчик, возможно получить ещё данные, то есть постоянный вход/выход. Чтобы это всё работало сейчас все обработчики разбиты по кускам и сделана стейт машина, которая переключается между ними. В данном случае легко сделать сохранение/восстановление устройства, так как всё хранится в структурах.
Но есть огромные минусы. Дабавляются новые более сложные команды, растёт стейт-машина, отлаживать становится всё сложнее и сложнее. К тому же, когда обработчики разбиты по кускам - код очень сложно читабельный и вероятность наделать ошибок сильно возрастает.
Есть мысли запускать обработчики в отдельном потоке или использовать coroutine. Тогда обработчики будут в виде отдельных функций, когда надо что-то записать/почитать просто делаем yield(), а после продолжаем исполнение с этой же самой точки. Всё хорошо, но не понятно как сохранять состояние. Coroutine работает за счёт переключения стэка и нельзя его просто сохранить, так как при след запуске будут совершенно другие адреса.
Есть 2 дурацкие идеи, мб у кого будут умные?-)
зы. надеюсь не слишком запутанно написал
Ответ на:
комментарий
от dimon555
Ответ на:
комментарий
от barzebuba
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Состояние устройства. (2017)
- Форум libusb: состояне устройства (2013)
- Форум FreeCiv - SDL client + Save/Load game (2007)
- Форум QSettings: unable to load/save type xxx (2009)
- Форум проброс устройств в qemu (2011)
- Форум проброс устройств в qemu (2011)
- Форум snmp контроль состояния сетевых устройств (2016)
- Форум Исчезновение USB-устройства после qemu (2012)
- Форум Перевод PCI устройства в состояние d3cold. (2014)
- Форум hethack34 save (2012)