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

 
 
 
Reply to this topicStart new topic
> WinAVR inline function
dimka76
сообщение Apr 8 2010, 05:52
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Есть функиция
Код
static volatile UCHAR        rcv_buff_U0[265];

UCHAR* Get_Data_U0(void)
{
  return (UCHAR*)rcv_buff_U0;
}


И ее прототип, объявленный в заголовочном файле
Код
UCHAR* Get_Data_U0(void);


Как правильно ее сделать inline функцией с аттрибутом __attribute__((always_inline)) так, чтобы ее можно было вызывать из функций, реализованных в других файлах проекта ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 8 2010, 06:06
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Определить её тело в заголовочном файле вместе с атрибутом.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Apr 8 2010, 06:23
Сообщение #3


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(IgorKossak @ Apr 8 2010, 10:21) *
Определить её тело в заголовочном файле вместе с атрибутом.


А что делать с возвращаемым значением?.
Она у меня возвращает адрес глобальной переменной, глобальной для того файла, в котором она реализована.
Что-то типа стиля С++, файл с реализациями функций как класс в С++.

Кстати, нашел похожую тему здесь.

И если я правильно понял, то ничего не получится.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 8 2010, 08:25
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Можно внутри функции в file.h написать:
Код
static inline __attribute__((always_inline)) int foo(int i)
{
    extern int x[];
    return (x[i]);
}

А в файле реализации убрать static перед int x[];
Конечно, не совсем кошерно, но это ИМХО единственный способ скрыть глобальную переменную....


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
dimka76
сообщение Apr 8 2010, 08:37
Сообщение #5


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(demiurg_spb @ Apr 8 2010, 12:40) *
Можно внутри функции в file.h написать:
..........................................
Конечно, не совсем кошерно, но это ИМХО единственный способ скрыть глобальную переменную....


Спасибо !!!
Все получилось smile.gif


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:06
Рейтинг@Mail.ru


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