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

 
 
 
Reply to this topicStart new topic
> IAR ARM, C. Что означает такая запись?, Функция объявлена без типов
Dreamer
сообщение Aug 5 2009, 14:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



В демке, приложенной к отладочной плате, встретил вот такой код:
Код
#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.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 5 2009, 14:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Это old-style объявление, по умолчанию будет использован тип int. C99 так делать уже запрещает, насколько я помню.
Go to the top of the page
 
+Quote Post
Dreamer
сообщение Aug 5 2009, 14:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Цитата
Это old-style объявление, по умолчанию будет использован тип int

То есть это эквивалентно следующему объявлению?:
Код
inline __arm void ExtCritSection(int Save)


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 5 2009, 15:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Dreamer @ Aug 5 2009, 18:58) *
То есть это эквивалентно следующему объявлению?:

В данном случае да, хотя процедура может возвращать значение типа int, т.е. являться эквивалентом:
Код
inline __arm int ExtCritSection(int Save)
Go to the top of the page
 
+Quote Post
Dreamer
сообщение Aug 5 2009, 15:33
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Спасибо.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post

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

 


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


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