Итак, выкладываю программу KL, выполняющую серверные функции в сети корвет-РМУ. По сути, обычный ПК превращается в сервер ПК8020. Сеть корветов подключается к любому последовательному порту ПК, можно даже в переходник USB-serial. Схемы подключения я ранее уже приводил, на всякий случай вложил их в тот же архив. Схемы проверены и на 100% рабочие.
Программа позволяет делать следующее:
- загружать в РМУ бейсик-программы и двоичные файлы с возможным автозапуском
- выгружать из РМУ бейсик-программы и любые области памяти
- просматривать бейсик-программы из РМУ в распакованном (символьном) виде, как по команде бейсика list
- посылать сообщения на консоль РМУ и принимать COM-сообщения
- наблюдать за трафиком в сети (функция сниффера, как tcpdump)
- использовать ПК как интерактивный сервер данных - посылать программы в РМУ по запросу с самих РМУ (COM-командами). Список команд есть в исходниках, на всякий случай привожу сюда:
Код:
@L file загрузка бейсик-программы
@S file сохранение бейсик-прогаммы
@LB file adr загрузка двоичного файла с адреса adr
@LBR file adr загрузка двоичного файла с адреса adr c автозапуском
@SB file adr len сохранение участка памяти с адреса adr длиной len
Как тут уже заметили, такая функциональность в свое время уже была реализована, но с другим форматом командной строки. Ну тут уж что получилось, то получилось. Переделывать уже неохота, да и привык я к таким командам.
Несколько слов о ключах настройки параметров. Адреса и размеры участков памяти всегда задаются в HEX-коде, например 3с00. Адрес РМУ и параметры времени задержки задаются в десятичном коде.
-t - устанавливает таймаут последовательного порта в 0.1с. По умолчанию 8 - 0.8c. Чем меньше параметр - тем быстрее идет опрос сети при поиске активных РМУ и меньше время подвисания при потере данных. С другой стороны, слишком маленький таймаут приводит к тому, что РМУ просто не успеет передать данные, и программа вывалится в бесконечный цикл перепосылки данных.
-u - устанавливает задержку перед посылкой адресного пакета. Дело в том, что по окончании обмена данными РМУ нужно определенное время для подготовки к приему нового адресного пакета. Если это время слишком маленькое - пакет уйдет раньше, чем РМУ подготовится к его приему, и программа вывалится по таймауту. Для одиночных операций (послать или принять файл) этот ключ практически не имеет значения - там адрес посылается всего один раз. Но при постоянном обмене, как например в режиме сервера, слишком большое значение этого параметра может серьезно замедлить работу.
На самом деле, программа не использует режим корректировки ошибок сети. Если пришел битый пакет, или РМУ ответило N, то просто файл перепосылается с самого начала. У меня еще ни разу не было ошибок передачи данных, а делать перепосылку отдельных пакетов на всякий случай без возможности отладки мне неохота.
Программа написана на С под Linux. Но особо на линукс не завязана (использует только termios для доступа к последовательному порту) и, по идее, может собраться и под другими ОС. Под FreeBSD точно работает. Собирается программа и в x86, и в x86_64 режиме. На всякий случай (вообще-то это очевидно) команда для сборки:
Надо бы, конечно, написать документацию, или хотя бы README к программе, но как-то неохота пока. Во времена, когда я копал винты, документацию писать я даже любил, но теперь постарел и обленился. Думаю, и сами разберетесь с программой, ничего сложного там нет и есть подсказка по ключу -h.
Вопросы, пожелания, замечания - оставляйте здесь, обсудим. Программа будет еще дорабатываться. Если кто-нибудь сам доработает программу - не поленитесь выложить сюда изменения, будьте людьми.