Как измерить время выполнения команд МК-161





Иногда может возникнуть необходимость измерения времени выполнения отдельных команд или небольших участков программ. Например, для оптимизации программы по быстродействию. Например, нужно измерить время выполнения команд с точностью 5 мкс, а дискретность временных интервалов таймера МК-161 равна 10 мс. Как это сделать?


Во-первых, нужно запустить таймер и зациклить выполнение исследуемых команд в (10 мс / 5 мкс), то есть в 2000 раз. Во-вторых, считать текущее время из таймера и рассчитать время, прошедшее во время выполнения цикла. Наконец, из полученного результата вычесть время, требуемое на выполнение программы цикла. Готово!


Вот программа, работающая по описанному алгоритму:


      0    1    2    3    4    5    6    7    8    9

 00   2    ВП   3    П0   3    2    х    П1  РРП   90

 10   50   ПП   35  FL0   11  РРИП  90   50  ИП1   ↔

 20   -    0    ,    5    +   К[х]  1    3    1    -

 30   5    х   С/П   БП   00  В/О


Запуск программы В/О, С/П. Время выполнения команд в микросекудндах отображается в регистре РХ.

Исследуемые команды помещаются, начиная с адреса 35, а в конце обязательно должна быть команда возврата из подпрограммы В/О! Изпользование подпрограммы сделано для удобства использования программы на МК-161, чтобы исследуемые команды находились в конце программы, а не в середине.


Например, замерим время выполнения команды КНОП, которая ровным счётом ничего не делает :) Дорабатываем исходную программу: FПРГ, ВВОД, 35, ВВОД, КНОП, В/О, FАВТ:


      0    1    2    3    4    5    6    7    8    9

 00   2    ВП   3    П0   3    2    х    П1  РРП   90

 10   50   ПП   35  FL0   11  РРИП  90   50  ИП1   ↔

 20   -    0    ,    5    +   К[х]  1    3    1    -

 30   5    х   С/П   БП   00  КНОП В/О


Запускаем программу, В/О, С/П, РХ=65. Оказывается на выполнение команды ничегонеделания МК-161 тратит 65 мкс! Согласно РЭ, МК-161 должен на безделье тратить всего около 50мкс :)


Исследуем команду сложения, FПРГ, ВВОД, 35, ВВОД, +, В/О, FАВТ:


      0    1    2    3    4    5    6    7    8    9

 00   2    ВП   3    П0   3    2    х    П1  РРП   90

 10   50   ПП   35  FL0   11  РРИП  90   50  ИП1   ↔

 20   -    0    ,    5    +   К[х]  1    3    1    -

 30   5    х   С/П   БП   00   +   В/О


В/О, С/П, РХ=420. Команда "+" выполняется за 420 мкс.


Исследуем команду извлечения квадратного корня из 2, FПРГ, ВВОД, 35, ВВОД, 2, F√, В/О, FАВТ:


      0    1    2    3    4    5    6    7    8    9

 00   2    ВП   3    П0   3    2    х    П1  РРП   90

 10   50   ПП   35  FL0   11  РРИП  90   50  ИП1   ↔

 20   -    0    ,    5    +   К[х]  1    3    1    -

 30   5    х   С/П   БП   00   2    F√  В/О


В/О, С/П, РХ=25655. Команда извлечения квадратного корня из 2 выполняется 25655 - 415, то есть 25,240 мкс! 415 мкс - это время выполнения ввода одной цифры.


Нужно учитывать, что в прошивке МК-161 применена оптимизация выполнения команд, например ввод одной цифры занимает 415 мкс, двух цифр - 480 мкс, трёх цифр - 545 мкс. То есть ввод первой цифры занимает 415 мкс, последующих цифр числа - по 65 мкс.


Возведение в степень 1 числа е выполняется за 285 мкс, а в степень 2 - 2240мкс, в степень 1,5 - 47090 мкс, то есть около 47 мс. Налицо работа по оптимизации выполнение команды возведения в степень числа е: чтобы возвести в степень 1 достаточно вообще ничего не делать, чтобы возвести число е в степень 2, достаточно алгоритма возведения в квадрат, а чтобы возвести число е в полуторную степень придётся использовать специальный алгоритм.



Сайт работает на микрокомпьютере