RomanG 0 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Пишу программу в IAR Kickstart for ARM 6.10. Есть небольша функция, которая вызывается из обработчика перываний. Объявил ее как inline при чем force: #pragma inline=forced __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; } ..................... Компановщик как ни в чем не бывало выдает предупреждение: [Go004] Could not inline function. Больше эту функцию нигде не использую. Фунция определена в одном файле с вызывающей. Уровень оптимизации максимальный. Ради эксперимента пытался заменить в параметре указатель на char просто - ноль эмоций. Может быть кто-нибудь подскажет как с этим бороться? Можно ли где-нибудь прочитать при каких условиях возможен inline, а при каких нет? В IAR C/C++ Development Guide сведения крайне скудные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Попробуйте так: __interwork static int HexToBin( char* chr) ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RomanG 0 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Попробуйте так: __interwork static int HexToBin( char* chr) ... Не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Есть подозрение, что комбинация __arm и __interwork мешает инлайнить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Убрать __interwork и посмотреть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Убрать __interworkи добавить __arm. Проект глобально, вероятно, в thumb собирается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RomanG 0 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба и добавить __arm. Проект глобально, вероятно, в thumb собирается. Точно! Большое спасибо! Зарботало! Не подумал, что код-то получается разный - в обработчике Arm, а функция в interwork. Весь проект действительно собирается в режиме Thumb. Замена _interwork на _arm решила проблему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться