Easyelectronics.ru

Электроника для всех
Текущее время: 04 мар 2021, 21:49

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: вопрос по страктам
СообщениеДобавлено: 25 июн 2010, 14:06 
Только пришел

Зарегистрирован: 18 мар 2010, 12:22
Сообщения: 16
ковыряюсь тут в однм коде:


tTxPacket tx_packet;

tRxPacket rx_packet;



типы tx_packet и rx_packet в свою очередь установлены как стракты



typedef struct {

UINT8 u8MaxDataLength;

UINT8 u8DataLength;

UINT8 *pu8Data;

UINT8 u8Status;

} tRxPacket;



typedef struct {

UINT8 u8DataLength;

UINT8 *pu8Data;

} tTxPacket;



Есть еще такой стракт

typedef struct

{

unsigned int netnum;

byte rxstrength;

byte command;

byte zdata[ZSTAR_MAX_DATASIZE];

} tZSTAR;



Также у меня есть такое в начале файла....



#define Z(x) ((tZSTAR *)((x)->pu8Data));

И теперь самое интересное.....

В одной из функций написано то что компайлер и я не понимаю



Z(&tx_packet)->command = ZSTAR_CONNECT;



П.с ZSTAR_CONNECT -это

#define ZSTAR_CONNECT 'c'

вопрос:
то что выделенно красным...что это?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по страктам
СообщениеДобавлено: 25 июн 2010, 14:21 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
eliran писал(а):
#define Z(x) ((tZSTAR *)((x)->pu8Data));

Z(&tx_packet)->command = ZSTAR_CONNECT;

#define ZSTAR_CONNECT 'c'


Z(x) - макрос с параметром. При компиляции все обращения типа Z(x) заменяются на ((tZSTAR *)((x)->pu8Data)); При этом x заменяется на то, что стоит в скобках при обращении к макросу.
В следующей строчке как раз идет обращение к нему. В него передается указатель на структуру, описывающую (если я правильно понял) пакет для отправки. В самом макросе из этой структуры берется адрес буфера, приводится к типу указателя на tZSTAR. И дальше идет обращение к полю command этой структуры - в него записывается 0x63 или 'c'.

В результате, если раскрыть этот макрос получится вот такое:
((tZSTAR *)((&tx_packet)->pu8Data))->command='c';

непонятно только при чем здесь экзотические контроллеры :)

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по страктам
СообщениеДобавлено: 25 июн 2010, 14:50 
Только пришел

Зарегистрирован: 18 мар 2010, 12:22
Сообщения: 16
это код контроллера фрискейл, хотя эта тема контроллера не касается, а рубрики программирования тут нет...я думал куда сбросить тему сюда или в детские вопросы, решил сюда)))
спасибо)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по страктам
СообщениеДобавлено: 25 июн 2010, 15:48 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 11:58
Сообщения: 679
Откуда: Курган
как то плохо читаются слова стракты,фрискейл, компайлер, прям сразу и не поймешь о чем речь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по страктам
СообщениеДобавлено: 25 июн 2010, 16:10 
Старожил

Зарегистрирован: 06 фев 2010, 17:22
Сообщения: 1557
Откуда: Иркутск
Зато правильное произношение, лучше чем "структ":) Но просто "структура" ага, как-то понятнее.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB