Периодически возникает необходимость регистрировать некие события (приход пакета по ETHERNET, приход байтика по rs-485… неважно) с привязкой ко времени. Раньше запускал таймер (hpet), считал миллисекунды и брал их, когда нужно. Если на такой таймер повесить выдачу наружу (дискретный сигнальчик, какой ни будь), то можно осциллографом, или чем ни будь посмотреть, что всё выдается более, менее похожим на правду (точно не скажу, но примерно +- четверть миллисекунды). Далее возникает необходимость мерить точнее. Вообще интересен вопрос, какую точность можно поиметь от персоналки. Мерить тиками. Всё хорошо, при условии что мы знаем частоту процессора точную, реальную и она не плавает в процессе работы. Как узнать частоту проца и не плавает ли она. QueryPerformanceFrequency в винде выдает разные значения каждый раз при перезагрузке, почему ? Как вообще эта функция реализована ? В linux в информации о процессоре (/proc/cpuinfo) тоже цифра разная каждый раз. Осильте кто ни будь мой поток сознания и ответьте на вопросы по мере нахождения в тексте, если возможно. Заранее благодарен.
Зависит от системы. Выбирается наибыстрейший таймер. Если частота точно неизвестно то мереется. Если известна то вбивается фиксировнная. Излишне. Обычной PIC позволяет мерить до микросикунд. Значение счетчика можно считать из таймера или восе его перепрограммировать. В ряде процессорах RDSTC имеет фиксированную частоту "не зависящую" от частоты процессора. Поэтому порой виндовс берет ее в качестве QueryPerformanceFrequency. Фиксируетса частота RDSTC при загрузки компьютера. Так что при разных загрузках может быть разной и выбирается она соизмеримой с частотй процессора. Насчет точности хочу заметить что измерять мы можем очень маленькии временные промяжутки. Но относительная ошибка состовляет приерно 50 милионных.
наверно rdtsc имелось ввиду ? тоесть это не тики процессора а какие то попугаи ? всётаки почему разная ? всё динамическое управление частотой выключено. (всякие кул энд квает и тому подобное)
unkier Да вечно путаю. Зависит от модели процессора. В старых была равной частоте процессора и почти не изменялась. В другом ряде менялось изменялась вместе с частотой в зависимости от нагрузки. А в третьих уже разделили частота процессора меняется, а rdtsc остается фиксированной, но соизмеримой с частотой процессора.
С помощью тск это не измеришь с необходимой точностью. Тск используется всегда в цикле, где множество итераций потом делятся на их число, чтобы найти среднее значение. Это напрмер для опередения скорости исполнения какойто процедуры. Но на порту длительность сигнала этим не измеришь, темболее исли поток данных быстрый, так как за малый промежуток времени всёравно счётчик будет прыгать, так у интел. Может гденибудь у амд иначе..