Функция вот такая (сорри за синтаксис - выдернуто после препроцессора)
Код
#pragma inline
unsigned int Sensor(unsigned char sensor_num)
{ switch (sensor_num) {
case HighInputPressure: return (sensors & bHighInputPressure);
case CanFull: return (sensors & bCanFull);
case CanShorted: return (sensors & bCanShorted);
case WaterCounter: return (sensors & bWaterCounter);
case LeakageOn: return (sensors & bLeakageOn);
case LowPower: return (sensors & bLowPower);
case ConcCounter: return (sensors & bConcCounter);
case LowOutputPressure: return (sensors & bLowOutputPressure);
case HighOutputPressure: return (sensors & bHighOutputPressure);
case MaxOutputPressure: return (sensors & bMaxOutputPressure);
case ExtraOutputPressure: return (sensors & bExtraOutputPressure);
} return 0;}
unsigned int Sensor(unsigned char sensor_num)
{ switch (sensor_num) {
case HighInputPressure: return (sensors & bHighInputPressure);
case CanFull: return (sensors & bCanFull);
case CanShorted: return (sensors & bCanShorted);
case WaterCounter: return (sensors & bWaterCounter);
case LeakageOn: return (sensors & bLeakageOn);
case LowPower: return (sensors & bLowPower);
case ConcCounter: return (sensors & bConcCounter);
case LowOutputPressure: return (sensors & bLowOutputPressure);
case HighOutputPressure: return (sensors & bHighOutputPressure);
case MaxOutputPressure: return (sensors & bMaxOutputPressure);
case ExtraOutputPressure: return (sensors & bExtraOutputPressure);
} return 0;}
В качестве параметра функции параметр enum - то есть известен на этапе компиляции.
В похожей ситуации ситуации IAR AVR 5.11 все разруливал.
Оптимизация максимальная по скорости со всеми галками.
Есть шанс как-то подтолкнуть компилятор, или ?