[an error occurred while processing this directive]
Да уж, большое поле для оптимизации, есть где разгуляться, даже глаза разбегаются(:-)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено GM 14 сентября 2005 г. 17:21
В ответ на: Да елки-палки отправлено -=ВН=- 14 сентября 2005 г. 13:11

Не хочется обижать автора, но мне кажется, алгоритм недостаточно продуман. Ну, по порядку.Рассмотрим основные операции с аккумулятором А.


MPY *AR2,A ;1 - AA0=RC*ATMP(IB)
SFTA A,1 ;1 - AA0<<1
ADD *AR3,16,A ;2 - AA0=AA0+ATMP(IP)<<16
BC lab2,ANOV ;5 - If AA0 overflowed...
...
lab4: ADD #2,14,A ;2 - RND(AA0)
...
STH A,*AR3+ ;1 - ATMP(IP)=RND(AA0)

Здесь Вы умножаете ATMP(IB) на RC и зачем-то произведение отдельно умножаете на два (хотя можно было бы просто умножать на удвоенное содержимое Т), затем добавляете ATMP(IP) к АН и проверяете на переполнение и, наконец, округляете(!).
Здравый смысл подсказывает, что сначала лучше округлить, а потом уж проверить на переполнение.

Если переставить местами умножение и сложение, то результат не изменится, но тогда можно воспользоваться командой МАС с округлением и уж потом проверять на переполнение.


ld *ar3,16,a ;1 – acc=ATMP(IP)<<16
macr ar2,a ;1 - acc=rnd[acc+(RC*2*ATMP(IB)]
bc lab2,anov ;5 - If AA0 overflowed...
...
lab4:
...
sth a,*ar3+ ;1 - ATMP(IP)=ah

То же самое можно проделать и с операциями в аккумуляторе В. Итак, вместо 12+12=24 циклов получилось 8+8=16, т.е. съэкономилось 8 циклов.
Всего будет 16*625=10000МЦ, а вы говорите 13125(!). Жить стало лучше, жить стало веселее(:-).

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru