[amirus] Re: [MDC: Lang: C/C++] udelay

  • From: 4afc <ml@xxxxxxx>
  • To: Pavel Fedin <amirus@xxxxxxxxxxxxx>
  • Date: Mon, 8 Jan 2007 15:40:22 +0300

Hello Pavel,

December 25, 2006, you wrote on MDC:

PF>  Is there any cheap way to delay for very small amounts of time under 
MorphOS?
PF>  What if i need to delay for just one microsecond?
PF>  I guess using timer.device/TR_ADDREQUEST in this case is a bit overhead.

Одна микросекунда? Это невозможно даже теоретически!!!
Радуйся если добьёшся паузы в одну миллисекунду с точностью
полмиллисекунды (например TimeDelay(UNIT_MICROHZ,0,1000) на 1ГГц )
Более-мение к таким временам на персональных компьютерах с частотой
процессора выше 300МГц можно приблизиться на ОС реального времени с
микроядром (Ни МОС, ни любой линукс, и уж тем более виндыЦЕ на такое не
способны).

Просто ПК официально имет только системный таймер работающий с
частотой 1193181Гц, сам понимаешь, что микросекунду по нему отмерить
невозможно в принципе. Но он тебе и не доступен. Остаётся шедулинг
задач в ядре. Ведь срабатывание таймера - это внепланывый вызов твоей
задачи.  На микроядрах (например QNX4) есть возможность
выставить дискрет от 100 до 0.2мс, на QNX6 гарантируют 10мкс на
300МГц. Но всё это от ядра зависит.
Можно ещё запустить хакерский таймер в часах (есть на всех ПК) с
точностью 1\8192 секунды - и обрабатывая 8 прерывание самому получить
точное время.
Больше вариантов на ПК - нет. Да и вообще ПК на любой ОС умирает от
прерываний выше 1кГц. От 1 до 10кГц на 1ГГц проце - ты будешь только
эти прерывания и обрабатывать, затем система обвалиться ибо не
останется времени на обработку остальных прерываний (кроме твоего).

-- 
Best regards,
 4afc                            mailto:ml@xxxxxxx


Other related posts: