Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не инлайнится функция
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
IAR MSP430 4.10
Функция вот такая (сорри за синтаксис - выдернуто после препроцессора)

Код
#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;}


В качестве параметра функции параметр enum - то есть известен на этапе компиляции.

В похожей ситуации ситуации IAR AVR 5.11 все разруливал.
Оптимизация максимальная по скорости со всеми галками.
Есть шанс как-то подтолкнуть компилятор, или ?
zltigo
Цитата
Есть шанс как-то подтолкнуть компилятор, или ?

#pragmа inline=forced
unsigned int Sensor(unsigned char sensor_num);

..........
..........


unsigned int Sensor(unsigned char sensor_num)
{
.......
}
Dog Pawlowa
Цитата(zltigo @ Sep 5 2009, 21:27) *
#pragmа inline=forced

Спасибо. Переклинило в субботний вечер sad.gif
zltigo
Причем,полагаю, без =forced тоже теперь работает.
Dog Pawlowa
Цитата(zltigo @ Sep 5 2009, 22:03) *
Причем,полагаю, без =forced тоже теперь работает.


Нет, дело именно в этом. А вот прототип функции не нужен.
Компилирую с ремарками, ничего даже не мяукнуло на неполную (ну раз не работало) прагму.
zltigo
Цитата(Dog Pawlowa @ Sep 5 2009, 21:52) *
Нет, дело именно в этом. А вот прототип функции не нужен.
.....на неполную (ну раз не работало) прагму.

Правила игры описаны в CompilerRefrence
Цитата
Use this pragma directive to advise the compiler that the function whose declaration
follows immediately after the directive should be inlined—that is, expanded into the
body of the calling function. Whether the inlining actually takes place is subject to the
compiler’s heuristics.

И вообще,работать без прототипов по любому моветон.
Dog Pawlowa
Цитата(zltigo @ Sep 5 2009, 23:43) *
И вообще,работать без прототипов по любому моветон.

Наверное, но с учетом поведения компилятора все как-то неоднозначно и непонятно.
Например, при размещении тела функции с модуле и при указании inline=forced для прототипа в хэдере я ожидал, что компилятор молча (или не молча) проглотит, естественно, не инлайня (поскольку тела функции в месте компиляции нет), а директива инлайн не является безусловной.
Оказалось нечто странное:
Error[e46]: Undefined external "Sensor" referred in k_calibr ( D:\Work\TypeKmerged\Debug\Obj\TypeK\k_calibr.r43 )

Ну да ладно, все работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.