
- •1.1. Форматный ввод/вывод
- •1.2. Нефайловая работа с терминалом
- •1.3. Управление распределением динамической памяти
- •1.4. Работа со строками и символами
- •1.5. Средства отладки
- •5. Язык си. Руководство оператора.
- •5.1. Стадии подготовки программы
- •5.2. Проблемы промежуточных файлов
- •5.3. Эмуляция eis
- •5.5. Инициализация fpu
- •5.6. Форматный вывод чисел с плавающей запятой
- •5.7. Оптимизация
- •5.8. Компоновка
- •5.9. Создание автономных программ
- •5.10. Сообщения оператору
- •6.1. Ввод и обработка командной строки
- •6.2 Управление стартовыми действиями
- •7. Пакет работы с терминалом
- •7.1. Обновление экрана
- •7.2. Запуск
- •7.3. Вывод
- •7.4. Ввод
- •7.5. Завершение работы
- •7.6. Оптимизация движения курсора
- •9. Краткое описание компилятора си фирмы dec.
- •10. Перечень ошибок
5.5. Инициализация fpu
Перед использованием команд FPU необходимо провести
инициализацию и установку режима процессора FPU - как аппаратного,
так и реализованного эмулятором. Обычно инициализация выполняется
при старте программы, в том случае, если в программе используются
операции с ПЗ. Инициализацию можно безусловно отключить, используя
ключ 'К'. Это полезно при компиляции функций, которые содержат
операции с ПЗ, но могут быть использованы в чисто "целых"
приложениях, в которых операции с ПЗ не используются (пример -
функция _doscan() из стандартной библиотеки, которая содержит
команды преобразования для чисел с ПЗ, однако часто он используется
в программах, не использующих вещественных чисел). Включение
инициализации FPU (она выполняется в модуле $$init()) управляется
наличием глобальной ссылки "fpin$$", которая вставляется в программу
на стадии компилятора (C1).
5.6. Форматный вывод чисел с плавающей запятой
Поскольку арифметика с ПЗ используется во многих приложениях языка "СИ" не так уж часто, существует механизм исключения (при компоновке) функций форматного вывода чисел с ПЗ. По умолчанию включение функций форматного вывода чисел с ПЗ происходит при наличии в программе операций с ПЗ, однако включение этих функций может быть подавлено указанием в командной строке ключа '-Z'. Это может быть полезно для экономии памяти, если в программе используются операции с ПЗ, а вывод чисел с ПЗ не используется. Если функции не включены, а вывод чисел с ПЗ используется, то в поле числа будет выведен один символ'?' и необходимое для заполнения поля число заполнителей. Размер подпрограмм форматного вывода чисел с ПЗ около 2 блоков (1 Кбайт).
Включение функций форматного вывода чисел с ПЗ происходит при компоновкe и управляется наличием глобальной ссылки "$$fppr", которая (при необходимости) включается в программу на стадии компиляции (C1).
5.7. Оптимизация
Компилятор выполняет различные оптимизационные преобразования программы, в основном касающиеся оптимизации выражений. Кроме того, ключом 'X' может быть включена стадия оптимизатора (C2), которая будет выполняться после стадии компилятора. Стадия оптимизатора увеличивает общее время компиляции приблизительно на 20% (при наличии всех других стадий) и приводит, в-среднем, к уменьшению обьема результирующей программы и увеличению скорости ее выполнения на 3-5% (числа относятся и к скорости, и к обьему). При помощи ключа 'Т' можно запросить статистику стадии оптимизатора. Особенностью работы оптимизатора является то, что при обработке функции он помещает в оперативную память весь ее (ассемблерный) текст, поэтому для больших функций оптимизатору может не хватить оперативной памяти. Выход в такой ситуации - разбивать программу на более мелкие функции.
5.8. Компоновка
После компиляции полученные обьектные файлы должны быть скомпонованы с библиотеками (и друг с другом). Поставляются следующие модули и библиотеки:
SPEIS.OBJ Головной модуль для ЭВМ с EIS.
SPNHD.OBJ Головной модуль для ЭВМ без EIS (включение эмулятора ЕИС).
CXLIB.OBJ Стандартная библиотека.
INITNF.OBJ Модуль инициализации без эмуляции запроса # ОС UNIX.
NFTIO.OBJ Модуль нефайлового терминального ввода-вывода.
CRLIB.OBJ Библиотека системных функций ОС RT11.
CTLIB.OBJ Библиотека дополнительных системных функций TS монитора.
CMLIB.OBJ Библиотека стандартных математических функций.
ASPEIS.OBJ, ASPNHD.OBJ, CALIB.OBJ Головные модули для автономных программ и библиотека автономной поддержки.
ANTIO.OBJ Модуль/заглушка для отключения терминального ввода/вывода в автономных программах.
LINK PROG,C:SPEIS,C:CXLIB/BOTTOM:2000 или
R LINK
PROG=PROG,C:SPEIS,CXLIB/B:2000
^C
В общем случае файлы при компоновке должны указываться в следующем порядке:
1.Объектные файлы программы пользователя.
2.Модули нестандартной конфигурации исполняющей системы (если они необходимы): INITNF.OBJ, NFTIO.OBJ, AFTIO.OBJ.
3.Головной модуль SPEIS или SPNHD
Головной модуль не включен в стандартную библиотеку, т.к. некоторые старые версии компоновщика ОС RT11 отказываются компоновать программу с правильным стартовым адресом, если модуль, с которого производится запуск программы, находится в библиотеке.
4.дополнительные библиотеки (CRLIB, CTLIB, CMLIB и др., а также библиотеки пользователя).
5.Стандартная библиотека CXLIB.
Ключ "BOTTOM" в командной строке определяет (octal) верхнюю границу
пространства, отводимого под стек (по умолчанию верхняя граница
равна 01000). Причина необходимости увеличения отводимого под стек
пространства в том, что программы, написанные на "СИ", в стеке
размещают свои локальные (автоматические) переменные. Простые программы могут работать и с обычным стеком (01000), а для сложных программ (с большим обьемом автоматических переменных или с большой глубиной вложенности вызовов) для стека может понадобиться пространство с верхней границей больше 02000. Переполнение стека приводит, как правило, к фатальным системным ошибкам типа и может нарушить работу операционной системы (если используется не TS монитор). Рекомендуется при отладке использовать ключ 'P' компилятора, см. "Средства отладки". При этом будет диагностироваться опускание стека ниже 0600.