Специфические особенности
Запуск ISaGRAF
В начале работы ISaGRAF выполняется следующий алгоритм:
· Определения
Код приложения это двоичный код, который генерируется и загружается подсистемой разработки и затем исполняется на целевой машине. Он может быть дополнен таблицей символов.
Таблица символов - это ASCII база данных, которая генерируется и загружается подсистемой разработки. Эта таблица обеспечивает связь символьных объектов и внутренних объектов целевой задачи. Она требуется в целевой задаче только в случаях специфического управления символами. Подробнее о таблице символов можно узнать в руководстве пользователя: Продвинутые средства программирования.
Когда приложение загружается отладчиком подсистемы разработки в целевую машину, код приложения сохраняется на диске в файле под именем
ISAx1 резервная копия файла кода приложения ISaGRAF (x - номер подчиненного)
Если, кроме того загружена таблица символов, она тоже сохраняется на диске в файле под именем
ISAx6 резервная копия файла таблицы символов приложения (x - номер подчиненного)
Когда ISaGRAF запускается, целевая задача ищет код приложения и таблицу символов в текущем каталоге и загружает их в память. Если файл таблицы символов не найден, то целевая задача исполняет код приложения без таблицы символов. Если в памяти нет кода приложения, то целевая задача ждет, когда приложение будет загружено.
Для того чтобы запустить приложение при включении машины без использования отладчика скопируйте эти файлы на диск целевой машины в текущий каталог целевой задачи. В бездисковой конфигурации можно использовать виртуальный диск.
Если система разработки ISaGRAF установлена в стандартном каталоге \ISAWIN, то:
файл кода приложения проекта MYPROJ будет называться
\ISAWIN\APL\MYPROJ\appli.x8m
файл таблицы символов приложения проекта MYPROJ будет называться
\ISAWIN\APL\MYPROJ\appli.tst
Пример:
Если из каталога, где находится isa.exe, выдать команду
copy \ISAWIN\APL\MYPROJ\appli.x8m isa11
то isa.exe найдет и выполнит приложение ‘myproj’.
Все эти команды можно поместить в командный файл и запускать его из меню Инструменты системы разработки.
Обработка ошибок и выдача сообщений
Целевая задача ISaGRAF включает в себя обработчик ошибок. Список ошибок приводится в приложении.
Обработка ошибок происходит по следующим правилам:
- Ошибка состоит из номера и аргумента, посылаемых обработчику ошибок ISaGRAF.
- Если в системе разработки установлен флаг обнаружения ошибок, то ошибка обрабатывается. Если нет - информация теряется и обработка заканчивается.
Если обрабатывается:
- Номер (десятичное число) и аргумент (шестнадцатеричное число) выводятся в stdout.
- Номер ошибки и аргумент помещаются в кольцевой буфер FIFO, а позднее переносятся оттуда. Размер буфера определяется в опциях Make системы разработки. Когда буфер полон, сообщение о новой ошибке вытесняет самое старое сообщение.
- Ошибки извлекаются из буфера либо отладчиком, либо приложением, используя вызов SYSTEM (см. Руководство пользователя).
Когда отладчик фиксирует ошибку, сообщение о ней появляется в окне отображения ошибок. В зависимости от ситуации (работает приложение или нет) отладчик отображает имя объекта (переменной или программы) откуда пришла ошибка или аргумент ошибки (десятичное число) в квадратных скобках [x], который имеет различное значение для разных ошибок.
Сообщение об ошибке и ее значение по умолчанию выдаются в stdout. Если отображение в stdout нежелательно, можно использовать команду перенаправления следующего вида
isa -t=COM1 -s=1 >NUL
Системные часы
Поскольку ISaGRAF должен работать на любой системе, синхронизация цикла и обновление значений таймера происходит квантами величиной один стандартный тик (около 55 миллисекунд).
Следовательно, разрешение таймера не может быть лучше 55 мсек. По этой же причине при попытке установить продолжительность цикла менее 55 мсек. (но отличную от 0) будет выдаваться ошибка переполнения продолжительности цикла (error 66).
Невозможность модифицировать системный тик имеет и положительную сторону: исполнение ISaGRAF не может помешать никаким системным приложениям, а также функциям C или функциональным блокам, интегрированным в приложение.
Обратитесь к поставщику, если требуется специальная реализация, требующая лучшего разрешения.
Выход из системы
При тестировании приложения в непроизводственных условиях на настольном ПК у пользователя может возникнуть необходимость остановить ISaGRAF: это делается одновременным нажатием трех клавиш (чтобы исключить случайную остановку)
shift + ctrl + alt
Разумеется, если приложение не должно останавливаться по нажатию клавиш, необходимо предусмотреть какие-то средства, чтобы запретить такие комбинации.
Один из опасных побочных эффектов быстрого выхода заключается в том, что при этом не отключается интерфейс с платами ввода/вывода. Поэтому предусмотрены аккуратные способы остановки целевой задачи ISaFRAF:
остановка приложения из отладчика (при этом интерфейс с платами в/в закрывается)
остановки целевой задачи ISaFRAF с клавиатуры
Размер приложения
Поскольку целевая задача ISaGRAF под MSDOS предназначена для работы в реальном режиме, размер структуры данных не может превышать 64К. Поэтому код приложения, загружаемый системой разработки, не должен превышать этот предел. Вся доступная память ограничена стандартными 640 килобайтами.
Если требования по памяти Вашего приложения превышают эти пределы - обратитесь к поставщику для специальной реализации.
Если отображение в stdout нежелательно, можно использовать команду перенаправления следующего вида
prog_name [Опции] >>>/nil
Длительность цикла, поведение задач и их приоритеты
- В конце каждого цикла ISaGRAF, перед тем как начать новый цикл, выполняет следующий алгоритм:
Если определено фиксированное время цикла, тогда процессор переключается на выполнение других задач на оставшийся период времени. Если оставшийся период времени отрицательный, тогда выдается сообщение о переполнении и процессор освобождается на 1 тик диспетчеризации.
Если время цикла не фиксировано или остаток времени меньше или равен 1 тику, тогда процессор освобождается на 1тик.
Временное разрешение соответствует установленному в OS-9 размеру тика.
Указанная стратегия обычно используется для более рационального использования процессорного времени - чтобы уступить процессор другим задачам, работающим в данный момент в системе.
- Коммуникационная задача находится в спящем состоянии пока нет данных для передачи. В случае необходимости эта задача получает информацию о работающем приложении по протоколу вопрос/ответ от ядра. Коммуникационная задача запрашивает ядро. В конце цикла (чтобы успеть получить синхронный образ приложения) ядро дает ответ коммуникационной задаче.
Задачи ISaGRAF не модифицируют приоритет, который им присвоен. Пользователь волен сам регулировать приоритеты в соответствии с поведением задачи ISaGRAF и ее требованиями к системе. Например, чтобы ISaGRAF не прерывался задачами более низкого приоритета можно модифицировать такие управляющие параметры OS-9 как MIN_AGE или MAX_AGE.
Режим терминала
Целевой последовательный протокол распознает последовательность из 3х символов возврата каретки ($0D) и стартует задачу shell OS-9, если она доступна, на устройстве последовательной связи. Это позволяет получить строку приглашения shell на любом терминале, используя последовательную связь целевой задачи ISaGRAF.
Пример:
На хост ПК
- Закрыть отладчик ISaGRAF.
- Запустить сессию Windows Terminal (в группе accessories) с корректными коммуникационными параметрами
- Трижды нажать возврат каретки
Теперь Вы зарегистрированы в shell OS-9
- Напечатайте logout, чтобы выйти из режима терминала.
ПРЕДУПРЕЖДЕНИЕ:
Следует всегда чисто выходить из режима терминала, используя logout, и никак иначе. В противном случае следующее соединение с системой разработки окажется неудачным.