ARM плюсы и минусы например, касательно LPC2xxx
ARM не read-modify-write архитектура, поэтому чтобы изменить данные, необходимо загрузить слово(а) в рабочий регистр(ы), произвести некоторые действия и выгрузить данные обратно, а значит для выполнения простейших действий требуется несколько команд - загрузка указателя на данные, загрузка данных в регистры, работа с данными, выгрузка данных в память.
Растактовка команд (тут и далее под тактом подразумевается такт генератора):
- операция в ALU: 1 такт
- загрузка слова (32-бит) из внутренней SRAM: 3 такта
- сохранение слова (32-бит) в SRAM: 2 такта
- загрузка слова (32-бит) из внутренней Flash: 3 или 5 тактов в зависимости от настроек MAM
- загрузка SFR: 8 тактов
(а вся периферия (кроме портов в новых контроллерах LPC214x) висит на медленной шине VBP)
- сохранение SFR: 7 тактов
- переход (если программа выполняется из SRAM): 3 такта
- переход (если программа выполняется из Flash): как правило 5 тактов, возможно 3
Поэтому, чтобы например сбросить бит в регистре, допустим, флагов таймера - нужно его загрузить (8 тактов), применить маску (2-3 такта), сохранить (7 тактов)
Interrupt latency.
http://forum.elect …dex.php?showtopic=9336 ==========================
iosifk:
"...Далее сам контроллер прерываний. Здесь необходимо учитывать латентность (задержку на выполнение) контроллера. Контроллер – статический автомат, шифрующий состояния приоритетов. На входе у него регистр маски прерываний, триггер глобального разрешения-запрета. На прохождение сигнала через эти цепи требуется некоторое время. Далее, сигнал запроса приходит а АЛУ и …. Но перед этим должна завершиться текущая выполняемая команда. И эта команда не всегда бывает однотактная.
В качестве примера возьмем ADuC7025. В самом худшем случае время ожидания для FIQ состоит из самого большого отрезка времени, которое может потребоваться для сигнала запроса, чтобы пройти через синхронизатор, плюс время для завершения самой длинной команды - LDM, которая загружает все регистры, включая PC, плюс время, необходимое для аварийного прекращения работы данных, плюс время для входа в FIQ . В конце этого времени, ARM7TDMI будет выполнять команду, расположенную по адресу 0x1C (адрес вектора прерывания FIQ). Максимальное время - 50 циклов процессора, которое равно 1.2 мкСек для системы, использующей для процессора синхрочастоту в 41.78 МГц. Максимальное вычисление времени ожидания запроса на прерывание IRQ подобно приведенному выше, но необходимо учесть тот факт, что FIQ имеет более высокий приоритет и может задержать вход в запрос на прерывание IRQ, поскольку обслуживание прерывания верхнего уровня может проводиться в течение произвольного отрезка времени.
Минимальное время ожидания может быть уменьшено до 42 циклов, если не используется команда LDM , поэтому некоторые компиляторы имеют такую опцию, позволяющую компилировать, не используя данную команду. Другая опция, позволяющая уменьшить латентность до 22 циклов, состоит в том, что программа должна выполниться в режиме THUMB.
Минимальное время ожидания для FIQ или прерываний IRQ - всего пять циклов, которое состоит из времени, необходимого для того, чтобы запрос мог пройти через синхронизатор плюс время, требуемое для выполнения режима исключения."
AlexandrY
Короче, правильно рассчитать для чипов на ядре ARM не получится.
Кроме того, что вспомнил iosifk, нужно принять во внимание тормознутость контроллера памяти, FLASH и внутренних шинных мостов, могущие иметь место циклы DMA, эффекты конвеера и errata на ARM, эффекты кэша и его инвалидации, эффекты буферов отложенной записи и т.д. и это еще цветочки, для 2-х ядерных чипов DSP+ARM все еще гораздо сложнее.
Нужно делать замеры на железе в обязательном порядке
==============================================================================
Итого: тактов много, система команд не самая лучшая, interrupt latency имеет большую неопределенность и т.д. и т.п.
Так в чем же сила?