Какие аппаратные источники временных интервалов можно использовать для замера времени в программах 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 дают возможность настроить нужным образом внеш-ний осциллятор на этапе загрузки ОС.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: