[an error occurred while processing this directive]
Если подходить формально, не меняя алгоритм, то упростить можно так:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено _Bill 27 июня 2006 г. 14:09
В ответ на: Вопрос по программированию:На сях байты на 90 градусов повернуть. Нужна агрессивная оптимизация по скорости. отправлено <font color=gray>507</font> 27 июня 2006 г. 11:38


unsigned char j,i,b,d,t1,t2,t3;
j = 0;
do {
t1 = j * 8;
i = 0;
do {
d = 0;
t2 = 0x80>>(i&7);
t3 = i>>3;
b = 0;
do {
d <<= 1;
if(vbuf[(t1+(7-b))*16 + t3] & t2)
d++;
}
while (++b < 8);
lcd_port_WriteDR(d);
}
while (++i < 128);
}
while (++j < 8);

Суть оптимизация такова:
1. замена операторов for на do...while. Последние принципиально быстрее;
2. вынос выражений, инвариантных циклу, за пределы цикла. Правда, при этом потребовались дополнительные переменные.
Если компилятор делает подобную оптимизацию сам, то эффект не будет заметен.

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

Ответы


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

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

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

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

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru