В общем, сделал так:
Код
#define Kp (Vref*mm_Hg)/(STEPS_B*GAIN*SPAN)
А перед отображением значения давления на ЖКИ :
Код
diffPressure = ((double)adc_value-STEPS_B)*Kp;
Увеличил стек для процесса
measure , и все заработало

Цитата(Сергей Борщ @ Mar 27 2008, 14:28)

Поставив скобки вы ограничили поле деятельности оптимизатору. Поскольку вы делаете вычисления с плавающей точкой, то потери точности в этом выражении не ожидается и поэтому можно убрать лишние скобки, положившись на приоритет операций. Думаю, в этом случае оптимизатор сможет свести ваше выражение к y = kx+b.
Вы имеете в виду вместо
Код
#define Vin(adc_value) ((((((double)adc_value)/STEPS_B) - 1.0f)*Vref)/GAIN)
написать так?
Код
#define Vin(adc_value) (((double)(adc_value)/STEPS_B - 1.0f)*Vref/GAIN)
Здесь аргумент заключен в скобки. Нужно ли здесь явное приведение к типу (double) , если при вызове макроса Vin параметр будет явно преобразован к (double)?
....................
PS.Проблема была в большом количестве скобок и нехватки стека для процесса
measure. Поэтому основные вычисления процессору пришлось выполнять в
run time. Если убрать лишние скобки, то препроцессор преобразует вычисление к виду
y=(x-a)/b, что собственно я и сделал только по-другому, определив
Kp=1/b и во время вычисления
diffPressure=(adc_value-a)*Kp. Теперь при вызове макроса
Vin(adc_value)все работает

Спасибо,
СергейБорщ и
rezident.
PS2. Для наглядности перевода значения АЦП в давление создал вложенный макрос:
Код
#define Vin(adc_value) (((adc_value)/STEPS_B - 1.)*Vref/GAIN)
#define SPAN 16.7 // Span (mV) of Pressure Sensors = 1 psi
#define mm_Hg 51.714 // мм. рт. ст. (@ 0 гр. C)
#define Kp mm_Hg/SPAN
#define PRESSURE(adc_value) (Vin(adc_value)*Kp)
Проверил. Работает