реклама на сайте
подробности

 
 
> Не хочет инлайнить
РРоман
сообщение May 30 2011, 13:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374



Пишу программу в 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 сведения крайне скудные.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение May 30 2011, 17:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Убрать __interwork и посмотреть
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 30 2011, 20:52
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sergeeff @ May 30 2011, 20:03) *
Убрать __interwork
и добавить __arm. Проект глобально, вероятно, в thumb собирается.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
РРоман
сообщение Jun 1 2011, 09:17
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374



Цитата(Сергей Борщ @ May 31 2011, 00:52) *
и добавить __arm. Проект глобально, вероятно, в thumb собирается.

Точно! Большое спасибо! Зарботало! Не подумал, что код-то получается разный - в обработчике Arm, а функция в interwork. Весь проект действительно собирается в режиме Thumb. Замена _interwork на _arm решила проблему.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 08:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016