Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по си для at91sam
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sergey sva
объясните пожалуйста как это работает :
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
что такой #define знаю, а вот в первый раз увидел, знак вопроса и вот такую конструкцию :
USB_EndPoint##n : что означает ## и :
И как это будет работать pUDP->UDP_GLBSTATE &= ~AT91C_UDP_FADDEN; вот этот знак ~
Еще не совсем понимаю как вызывается функция ,которая имеет модификатор _inline.
функция с этим модификатором помещается по адресу в флэш, а когда она будет выполнятся ?
и как узнать где она располагается ? Вопросы простые, но если не затруднит объясните пожалуйста.
xelax
Цитата(sergey sva @ Dec 23 2008, 17:25) *
объясните пожалуйста как это работает :
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
что такой #define знаю, а вот в первый раз увидел, знак вопроса и вот такую конструкцию :
USB_EndPoint##n : что означает ## и :


? : ; это тернарный оператор. Своими словами объяснять не буду, проще любую книгу по С открыть.

## это для текстовой прекомпиляции, позволяет из левой и правой части, составить единый текстовый символ для компилятора.

Цитата(sergey sva @ Dec 23 2008, 17:25) *
И как это будет работать pUDP->UDP_GLBSTATE &= ~AT91C_UDP_FADDEN; вот этот знак ~


~ побитовая инверсия

Цитата(sergey sva @ Dec 23 2008, 17:25) *
Еще не совсем понимаю как вызывается функция ,которая имеет модификатор _inline.
функция с этим модификатором помещается по адресу в флэш, а когда она будет выполнятся ?
и как узнать где она располагается ? Вопросы простые, но если не затруднит объясните пожалуйста.


Тела Inline функций вставляются в места вызова этих функций.

ИМХО все вопросы к арму не имеют никакого отношения. Чистый С.
Прежде чем приступать к написанию кода не важно под какую платформу, лучше почитайте какую-нибудь книгу по Сям.
Других вариантов нет.
sergey sva
>позволяет из левой и правой части, составить единый текстовый символ

#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)

если n = 10; к примеру, то при компиляции ## будет заменено на 10 ?

получится USB_EndPoint10
HARMHARM
Цитата(sergey sva @ Dec 23 2008, 16:49) *
>позволяет из левой и правой части, составить единый текстовый символ

#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)

если n = 10; к примеру, то при компиляции ## будет заменено на 10 ?

получится USB_EndPoint10


Да, в случае если выражение ( USB_EP_EVENT & ( 1 << 10 ) ) отлично от нуля.
Скобки вокруг (USB_EP_EVENT & (1 << (n))) лишние, остальные очень даже не лишние smile.gif
sergey sva
Вот такая конструкция

__inline fun1(void){

.....
}

__inline fun2(void){

....
}

__inline fun3(void){

.....
}

Эти функции записаны в одном файле к примеру source1.c
в другом файле код #include "source1.c" и функция main (){ while(1); }
Не пойму сколько раз будут выполнятся fun1 fun2 fun3 и когда, перед функией main ?
aaarrr
Цитата(sergey sva @ Dec 23 2008, 18:29) *
Не пойму сколько раз будут выполнятся fun1 fun2 fun3 и когда, перед функией main ?

Ни сколько. Выполняться будут, когда вызовут.

А вообще, возьмите букварь. И выбросьте кривой атмеловский код - хорошему у них научиться нельзя, уж поверьте.
sergey sva
Спасибо smile.gif теперь все понятно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.