Компилятор Keil ARM C: проблемы со встроенными функциями

Я переношу ядро ​​реального времени TNeoKernel на архитектуру Cortex-M, поэтому я установил Keil и пытаюсь собрать ядро. Однако я столкнулся с неожиданными проблемами: компилятор, похоже, не может обрабатывать inline функции. Вот простой код:

static inline int test(void)
{
   return 0;
}

Вывод компилятора следующий:

src\appl\main.c(17): warning:  #260-D: explicit type is missing ("int" assumed)
  static inline int test(void)
src\appl\main.c(17): error:  #65: expected a ";"
  static inline int test(void)

Если я удалю ключевое слово inline, он скомпилируется и заработает.

В документации компилятора ARM я ничего не могу найти о inline функциях. Итак, просто чтобы убедиться: действительно ли ключевое слово inline не поддерживается компилятором ARM? Это слишком невероятно, поэтому я решил спросить.

У меня есть много функций static inline в независимом от платформы коде ядра, так как же лучше всего сделать так, чтобы он поддерживал компилятор ARM? Навскидку у меня только две идеи:

  • создайте макрос, зависящий от архитектуры, например TN_INLINE, и для компилятора ARM он не должен расширяться до нуля;
  • конвертировать очень маленькие однострочные функции в макросы.

person Dmitry Frank    schedule 13.11.2014    source источник


Ответы (1)


Ключевое слово inline было введено в c99, но по по умолчанию Keil ARM C компилятор компилируется в режиме c89/c90.

Keil документация прямо говорит, что inline недоступен в c90:

Ключевое слово inline недоступно в C90.

Компилятор Keil ARM C также поддерживает c99. Используйте параметр компилятора --c99 для переключения в режим c99 или попробуйте использовать __inline ключевое слово расширения в режиме c90:

person ouah    schedule 13.11.2014
comment
Спасибо. Я прочитал документацию в формате PDF с сайта infocenter.arm.com: infocenter.arm.com/help/topic/com.arm.doc.dui0471j/ , о --c99 ничего нет. - person Dmitry Frank; 13.11.2014
comment
@DmitryFrank Вы не смотрели нужную документацию в формате PDF: та, на которую вы ссылались, - это Руководство по разработке программного обеспечения для компилятора ARM. Документация по компилятору PDF находится в руководстве пользователя armcc infocenter.arm. com/help/topic/com.arm.doc.dui0472j/ - person ouah; 13.11.2014
comment
Спасибо еще раз. Я все еще новичок в экосистеме ARM, но учусь. - person Dmitry Frank; 13.11.2014