Цитата(smk @ Jan 20 2011, 21:09)

совершенно верно.
меня с точки зрения оптимизации волнует больше что возвращает pgm_read_byte
потому что очень большое чувство что можно там сократить до pgm_read_byte (pwm_ch[] ) или вообще привести к статичной табличке потому что у вас
результат прямо и однозначно зависит от значения которое лежит в pwm_ch[] значит и конечный результат можно предварительно вычислить и получить в виде val [pwm_ch[]] и тогда код сведется к красивому виду вроде
pb = (pwm > val[pwm_ch[]]) ? (pb & ~1) : (pb | 1);
а так как вы передаёте значения по ссылке то компилятор не сможет сделать этого за вас
UPD -----------------------------------------------------------------------------------------------------
Набросал небольшой кусочек кода , прошу общественность ногами не пинать , давно не писал на С сейчас пишу на языке более высокого уровня потому мог какие-то фенички оттуда утащить
Код
#проверяем и сбрасываем сразу при нуле
#два массива мапят порты (кто хочет можно массивом двумерных массивов , но по моему так проще)
#цикл проверки каналов и задания соответствующих значений (тут считается что автор пересчитал свой массивчик brightness до статических значений )
if ( pwm == 0 ) { pa |= 3; pb |= 31; pd |= 127; } else {
int log2phy[] = { pd, pd, pa, pa, pd, pd, pd, pd, pb, pb, pb, pb, pb, pd };
char log2val[] = { 1, 2, 2, 1, 4, 8, 16, 32, 16, 8, 4, 2, 1, 64 };
for (int i = 0; i < 14; ++i )
{ log2phy[i] = (pwm > brightness[pwm_ch[i]]) ? (log2phy[i] & ~log2val[i]]) : (log2phy[i] | log2val[i]); }
}
Сообщение отредактировал follow_me - Jan 20 2011, 23:09