Я переношу ядро реального времени 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 он не должен расширяться до нуля; - конвертировать очень маленькие однострочные функции в макросы.