Все, я закончил перенос своего кода в вариант эмулятора из репозитория. Пришлось понабивать шишек на ровном месте, но в коце концов все вроде заработало.
Поскольку своего репозитория у меня нет, прикладываю те файлы, которые я изменил. Их всего 4.
_main.c - добавлен разбор конфига, ключей, а также стартовый код и опрос сети.
serial.c - тут, собственно, всеь мой код и лежит.
korvet.h - добавлены заголовки сетевых подпрограмм и общих переменных.
korvet.cfg - добавлены параметры конфигурации сети.
Теперь о важных изменениях.
1. В конфиг-файл добавлена новая секция [lan], чтобы не путалось с остальными переменными. В секции пока только 3 параметра - ADDR, DEVICE и LOG, потом может быть еще добавим.
2. Добавлены ключи командной строки:
Это позволяет запускать несколько копий эмулятора, РМУ и РМП, из одного места, не изменяя файл конфигурации.Код:-s - имя устройства последовательного порта для эмуляции локальной сети -n - адрес РМУ в сети (0 для РМП) -l - имя файла сетевого протокола, в случае "-l-" (параметр знак минуса) отказ от создания файла протокола
3. Сделан полностью асинхронный ввод-вывод, теперь в турборежиме при пассивной сети FPS держится около 3500. Если сетевое устройство в конфиге не описано, то вызов LAN_poll() вообще не занимает процессорного времени - сразу возвращает управление.
4. Сделана полная поддержка псевдотерминалов для эмуляции последовательного порта. Теперь можно не только общаться с железным корветом, но и соединить 2 эмулятора между собой. Привожу пример такого запуска.
Стартуем первый эмулятор.
Это у нас будет РМП. В качестве последовательного устройства указываем мультиплексор виртуальных терминалов /dev/ptmx. Будет сформирован лог server.log.Код:./kdbg -n0 -s/dev/ptmx -l server.log -a disk/unsort18.kdi -b disk/MIKRDOS3.KDI Последовательный порт /dev/ptmx открыт Подчиненный псевдотерминал - /dev/pts/2 Открыт файл сетевого протокола server.log Адрес эмулятора в сети - 0 Driver: ALSA
При старте эмулятор указал, что сформирован подчиненный последовательный порт /dev/pts/2. Эта информация нам нужна для запуска второй копии эмулятора.
Теперь стартуем второй эмулятор
Это будет РМУ с адресом 2, сетевой лог сохраняется в client.log. В качестве последовательного порта указываем имя подчиненного виртуального терминала, выданное нам первой копией эмулятора.Код:./kdbg -n2 -s/dev/pts/2 -l client.log Открыт файл сетевого протокола client.log Адрес эмулятора в сети - 2 Driver: ALSA
Все, сеть из 2 корветов готова. Можно начинать развлекаться. Я потестировал сеть в программах STS и YP - работает вроде без сбоев в обе стороны.
Для разбора файлов сетевых логов я написал программку, но ее надо немного облагородить, мне ее стыдно выкладывать в первозданном виде. Как доведу до ума - выложу. А вообще формат лога описан в serial.c.
Моя программа KL также может взаимодействовать с эмулятором по сети через порт подчиненного виртуального терминала. Но требуется некоторая ее доработка. После доработки выложу в соответствующей теме.
А, и вот еще. Что это за оптимизацию -O7 ты там придумал?Вообще-то официально такой вообще не существует, а неофициально она эквивалентна -O3. Но даже -O3 использовать не рекомендуется - это экспериментальная оптимизация, можно нарваться на совершенно необъяснимые глюки. Хотя оно и дает примерно +500 к FPS.
Пока вроде все. Прикладываю архив с измененными файлами.




Вообще-то официально такой вообще не существует, а неофициально она эквивалентна -O3. Но даже -O3 использовать не рекомендуется - это экспериментальная оптимизация, можно нарваться на совершенно необъяснимые глюки. Хотя оно и дает примерно +500 к FPS.
Ответить с цитированием