Есть небольша функция, которая вызывается из обработчика перываний. Объявил ее как inline при чем force:
Код
#pragma inline=forced
__interwork int HexToBin( char* chr)
{
if ( *chr <= 0x39 )
..........
else
return (ERR_BAD_SYMBOL);
return (OK);
};
__interwork int HexToBin( char* chr)
{
if ( *chr <= 0x39 )
..........
else
return (ERR_BAD_SYMBOL);
return (OK);
};
Вызываю так
Код
__irq __nested __arm void UART1_Handler( void )
{
char chr[2];
..........................
if ( HexToBin(chr) != OK )
{
RS485_buff.RxLastError = ERR_BAD_SYMBOL;
continue;
}
.....................
{
char chr[2];
..........................
if ( HexToBin(chr) != OK )
{
RS485_buff.RxLastError = ERR_BAD_SYMBOL;
continue;
}
.....................
Компановщик как ни в чем не бывало выдает предупреждение: [Go004] Could not inline function.
Больше эту функцию нигде не использую. Фунция определена в одном файле с вызывающей.
Уровень оптимизации максимальный.
Ради эксперимента пытался заменить в параметре указатель на char просто - ноль эмоций.
Может быть кто-нибудь подскажет как с этим бороться? Можно ли где-нибудь прочитать при каких условиях возможен inline, а при каких нет? В IAR C/C++ Development Guide сведения крайне скудные.