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