і
МИКРОКОНТРОЛЛЕРЫ
І
а к
тоV %а0,%а1
а<Ш%аО,%а2
]пг ІаЬвІ
ІаЬеІ: зиЬІ %а 0,15
J U U U Ш Л Л Я Л Ш 1
ВК+Д - выборка команды и ее дешифрация
ВК+Д
ВО
ИК
ЗР
Рис. 1
Любая команда микроконтроллера при выполнении
поочередно передается через все эти блоки - отсюда
и название “конвейер”. На рис. 1 представлено, в ка-
кой последовательности обрабатываются на конвей-
ере команды микроконтроллера. Обратите внимание
- каждая команда в микроконтроллере обрабатыва-
ется за 6 тактов синхронизации. Между тем, докумен-
тация по микроконтроллеру утверждает, что время
выполнения команды - два такта. Нет ли здесь ошиб-
ки? - Нет! Команды микроконтроллера действитель-
но выполняются за шесть тактов, просто (за счет на-
личия конвейера) микроконтроллер в состоянии вы-
полнять три команды одноврем енно (или почти од-
новременно), поэтому ка ж ущ а я ся производитель-
ность микроконтроллера и получается втрое больше.
Конвейер - традиционный способ повышения произ-
водительности микроконтроллеров. Характерная осо-
бенность наличия конвейера в любом микроконтрол-
лере - все команды перехода (вызова подпрограмм,
возврата из них) выполняются вдвое - втрое дольше
обычных команд. Связано это с тем, что команды пе-
рехода нарушают нормальный процесс работы конвей-
ера - ведь заранее неизвестно (особенно для команд
условных переходов), какую команду нужно будет об-
рабатывать следом за командой перехода. Поэтому, при
появлении на конвейере команды перехода, процессор
микроконтроллера дорабатывает “остатки” команд с
конвейера, а затем заполняет конвейер заново - уже с
нового адреса, на который было передано управление.
Вот на этом времени заполнения и происходит потеря
производительности. Поэтому сразу - практический
совет: избегайте в программе переходов |т р -> |т р -
скорость работы на таких цепочках команд переходов
может падать втрое (исключение - вы числяем ы й пе-
реход: другим способом его не реализовать)!
Давайте проанализируем внимательно рис. 1. Пер-
вая команда - пересылка значения в ячейку %а0, вто-
рая - сложение другой ячейки с ячейкой %а0. Обра-
тите внимание на следующую
странность
(на рисунке
отмечена (!) ) - запись результата работы первой ко-
манды в ОЗУ произойдет позж е, чем содержимое этой
ячейки памяти будет сложено с другой ячейкой. Это
означает, что вторая команда прибавит значение не к
новому содержимому ячейки %а0, а к прежнему, ко-
торое было там перед выполнением команды
ш о у !
Вот
для того, чтобы этого не случилось, в аппаратуру мик-
роконтроллера введен специальный “невидимый” ре-
ги стр результата, недоступный программным путем.
Если микроконтроллер обнаруживает, что очередная
команда использует результат работы предыдущей ко-
манды, то его он возьмет и з регистра результата, а
не из того места, куда указы вает следующая команда
- там это результат еще не появился! Наличие регис-
тра результата решает описанную проблему при вы-
полнении команд программы, но эта проблема неожи-
данно “вылезает” в другом месте.
Допустим, нам необходимо считать содержимое ре-
гистра интервала интервального таймера. Регистр ин-
тервала, как известно, состоит из двух байт. Читаем
его:
ІСІГ
#А,40Ь
ІСІГ
#В,00Ь
тс^1
%Ь4,00000000Ь
; Доступ к младшему байту
тс^
%а0,%Ь5
; Заносим его в ОЗУ.
тсгеї
%Ь4 , ОООООЮОЬ
; Доступ к старшему байту
тс^
%а1,%Ь5
; Заносим его в ОЗУ
Итак, мы получили в ячейках %а0, %а1 значение
регистра интервала? Не тут-то было! В ячейке %а1
вместо старшего байта мы получили младший, а что
мы получили в ячейке %а0 - вообще одному Богу из-
вестно. Дело в том, что данные в управляющий регистр
таймера будут записаны позж е, чем мы считаем ин-
формацию из рабочего регистра, - и это несмотря на
то, что команда ш оу! расположена в программе рань-
ш е команды чтения! Причина здесь как в особеннос-
тях работы конвейера, так и в том, что мы записываем
---------------------------------------------------
1
35
Радиолюбитель - 0 7 /2 0 0 6 1
предыдущая страница 35 Радиолюбитель 2006-07 читать онлайн следующая страница 37 Радиолюбитель 2006-07 читать онлайн Домой Выключить/включить текст