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

 
 
 
Reply to this topicStart new topic
> Вопрос по си для at91sam
sergey sva
сообщение Dec 23 2008, 14:25
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



объясните пожалуйста как это работает :
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
что такой #define знаю, а вот в первый раз увидел, знак вопроса и вот такую конструкцию :
USB_EndPoint##n : что означает ## и :
И как это будет работать pUDP->UDP_GLBSTATE &= ~AT91C_UDP_FADDEN; вот этот знак ~
Еще не совсем понимаю как вызывается функция ,которая имеет модификатор _inline.
функция с этим модификатором помещается по адресу в флэш, а когда она будет выполнятся ?
и как узнать где она располагается ? Вопросы простые, но если не затруднит объясните пожалуйста.
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 23 2008, 14:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(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 функций вставляются в места вызова этих функций.

ИМХО все вопросы к арму не имеют никакого отношения. Чистый С.
Прежде чем приступать к написанию кода не важно под какую платформу, лучше почитайте какую-нибудь книгу по Сям.
Других вариантов нет.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 23 2008, 14:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



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

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

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

получится USB_EndPoint10
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Dec 23 2008, 15:11
Сообщение #4


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(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
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 23 2008, 15:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Вот такая конструкция

__inline fun1(void){

.....
}

__inline fun2(void){

....
}

__inline fun3(void){

.....
}

Эти функции записаны в одном файле к примеру source1.c
в другом файле код #include "source1.c" и функция main (){ while(1); }
Не пойму сколько раз будут выполнятся fun1 fun2 fun3 и когда, перед функией main ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2008, 15:34
Сообщение #6


Гуру
******

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



Цитата(sergey sva @ Dec 23 2008, 18:29) *
Не пойму сколько раз будут выполнятся fun1 fun2 fun3 и когда, перед функией main ?

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

А вообще, возьмите букварь. И выбросьте кривой атмеловский код - хорошему у них научиться нельзя, уж поверьте.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 23 2008, 15:43
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Спасибо smile.gif теперь все понятно.
Go to the top of the page
 
+Quote Post

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

 


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


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