В демке, приложенной к отладочной плате, встретил вот такой код:
Код
#if __CORE__ < 7
inline __arm ExtCritSection(Save)
{
unsigned long tmp;
tmp = __get_CPSR();
__set_CPSR(tmp & (Save | ~IRQ_FLAG));
}
#elif __CORE__ == 7
inline void ExtCritSection(void)
{
if(--CriticalSecCntr == 0)
{
asm("CPSIE i");
}
}
По идее, это объявление функции (макрос на строку "ExtCritSection") не нашел, значит, это имя функции.
Но тогда каким образом компилятор съедает функцию, объявленную без типа возвращаемого значения и без типа аргумента?
Имеется в виду первая ветка препроцессора, в котрой выполняется условие(#if __CORE__ < 7).
К ключевому слову __arm нашел такое объяснение, оно, как я понял, не отменяет правило именования функций, а лишь указывает, что она исполняется в арм-режиме:
Цитата
The __arm keyword makes a function execute in ARM mode. An __arm declared function can, unless it is also declared __interwork, only be called from functions that also execute in ARM mode.