Цитата(singlskv @ Mar 26 2008, 02:14)

А Вы везде заменили ? и в (((((adc_value)/STEPS_B) - 1.0 )*Vref)/GAIN) тоже ?
перед adc_value (float) ставили ?
Поставил в определении макроса
Код
#define Vin(adc_value) ((((((float)adc_value)/STEPS_B) - 1.0f)*Vref)/GAIN)
и при вызове макроса:
Код
diffPressure = (Vin((float)temp_ul)/SPAN)*mm_Hg;
Не помогло. Весь код привести не могу. Ф-ция
measure, в которой используется этот макрос, вызывается из процесса под управлением ОС. Т.е. процессор не должен задерживаться надолго в вычислениях. Но это же не ф-ция, здесь все вычисления уже сделал препроцессор. Неужели для препроцессора есть ограничения по количеству скобок? Или я ошибаюсь?
Цитата(rezident @ Mar 26 2008, 02:39)

alux, у вас оптимизация при компиляции используется?
Да, конечно. Всегда использую максимальную по размеру.
Цитата(rezident @ Mar 26 2008, 02:39)

Код
define Vin(adc_value) (((float)(adc_value)-STEPS_B)/STEPS_B*Vref/GAIN)
Остается одно вычитание константы и одно умножение на константу. Может компилятор не осилил эту оптимизацию при наличии такого количества скобок?
Не помогло. Та же фигня.
Цитата(meister @ Mar 26 2008, 08:38)

Значит, действительно в вычислениях дело. На каком процессоре делаете? Без аппаратной плавающей точки?
ATMega324P. Попробовал в симуляторе вставить
diffPressure = (Vin((float)temp_ul)/SPAN)*mm_Hg; в начало программы (в
main). Вычисление заняло пару тактов.