Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ complete edition епта.docx
Скачиваний:
17
Добавлен:
24.09.2019
Размер:
488.03 Кб
Скачать

185. В чём причина неправильности использования одноразового таймера в цикле для реализации заданного интервала времени в программе?

Реализация периодического многоразового таймера путём цик-лического вызова однократной задержки всегда сопряжена с накоп-лением ошибок (cumulative drift). Накопленный временной дрейф за 1000 шагов составит 2с.

таймер отрабатывает не ровно указанное время а немного больше + необходимое на создание нового таймера время

186. Какие аппаратные источники временных интервалов можно использовать для замера времени в программах qnx Neutrino?

Инфу взял из его методички

В ОС РВ QNX за отсчёт временнЫх интервалов, используемых для собственных системных нужд и программных таймеров в пользовательских приложениях, ответственно микроядро Neutrino. В качестве источника временных импульсов микроядро использует прерывания аппаратного таймера. На IBM PC совместимых компьютерах – это микросхема Intel 8254 и её аналоги. Частота генератора внутренних импульсов чипа i8254 составляет 1.1931816 МГц, что соответствует периоду Tат = 838095345 фемтосекунд = 838.095345 нс. Эта частота уменьшается до заданных допустимых значений путём загрузки ядром соответствующего целочисленного значения в 16-битный регистр-счётчик аппаратного таймера . Наибольшее значение счётчика определяет наименьшую частоту генерируемых аппаратных прерываний. Каждое прерывание соответствует тику системных часов. На компьютерах с архитектурой Intel прерывание от аппаратного таймера имеет наивысший приоритет, и обработка этих прерываний может внести задержку реакции на другие прерывания с более низким приоритетом. Обработка прерываний от таймера в простейшем случае включает обновление счётчика системного времени и занимает на тестовой машине 4 мкс. Если после обновления счётчика истекает время какого-либо из таймеров, обработка прерывания может занять больше времени. Значение 4 мкс хотя и мало, но не является предельным возможным.

Для формирования системного времени на этапе загрузки операционной системы QNX/Neutrino использует аппаратные часы реального времени. На платформе x86 обычно они совмещены в одном кристалле с питаемой от батарейки “энергонезависимой” CMOS-памятью.

Для высокоточного измерения коротких временных интервалов используется 64-разрядный регистр-счётчик TSC (time-stamp counter) современных микропроцессоров, инкременируемый с тактовой частотой микропроцессора. На процессорах, начиная с i586, доступ к этому счётчику осуществляется с помощью ассемблерной инструкции RDTSC, библиотека Neutrino имеет соответствующий макрос ClockCycles(), определённый в /usr/include/x86/neutrino.h.

Некоторые ОС используют дополнительные аппаратные тайме-ры, доступные на современных материнских платах персональных компьютеров, такие, как таймер высокого разрешения IA-PC HPET и таймер управления питанием ACPI (расширенного интерфейса конфигурирования компьютера и управления питанием). Таймер ACPI при сравнимой с TSC разрешающей способностью (частота 3.579545 МГц) имеет то преимущество, что его частота неизменна и не зависит от режима энергопотребления компьютера.

Микроядро QNX/Neutrino, в отличие от других операционных систем, не умеет обращаться к таким таймерам. Однако, используя модульный принцип архитектуры QNX и стандартные средства взаи-модействия с устройствами, программист самостоятельно может расширить применяемый в своих приложениях набор аппаратных таймеров. В частности, кроме упомянутых, в качестве источников пе-риодических аппаратных прерываний с различными частотами могут быть использованы часы реального времени (обеспечивают частоты

прерываний 2n, n = 1,2,…,13) и микросхема UART (см. п. 1.9). Применяются также внешние источники периодических импульсов, на-пример аппаратные таймеры, размещённые на платах расширения , или электронные схемы, подключённые к параллельному порту . На современных процессорах (Pentium-3 500 МГц) QNX/Neutrino обеспечивает бесперебойную обработку прерываний от параллельного порта с частотой 10 кГц.

Стандартные средства программирования стартового кода QNX/Neutrino дают возможность настроить нужным образом внеш-ний осциллятор на этапе загрузки ОС.