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

 
 
> Структура функций, В чём преимущество ?
pokk
сообщение Feb 14 2014, 00:34
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Здравствуйте, есть вот такая хитрая структура (тут мне не совсем понятно что делает union и зачем он там нужен)
CODE

typedef struct __WIZCHIP
{
uint16_t if_mode; ///< host interface mode
uint8_t id[6]; ///< @b WIZCHIP ID such as @b 5100, @b 5200, @b 5500, and so on.
/**
* The set of critical section callback func.
*/
struct _CRIS
{
void (*_enter) (void); ///< crtical section enter
void (*_exit) (void); ///< critial section exit
}CRIS;
/**
* The set of @ref\_WIZCHIP_ select control callback func.
*/
struct _CS
{
void (*_select) (void); ///< @ref \_WIZCHIP_ selected
void (*_deselect)(void); ///< @ref \_WIZCHIP_ deselected
}CS;
/**
* The set of interface IO callback func.
*/
union _IF
{
/**
* For BUS interface IO
*/
struct
{
uint8_t (*_read_byte) (uint32_t AddrSel);
void (*_write_byte) (uint32_t AddrSel, uint8_t wb);
}BUS;
/**
* For SPI interface IO
*/
struct
{
uint8_t (*_read_byte) (void);
void (*_write_byte) (uint8_t wb);
}SPI;
// To be added
//
}IF;
}_WIZCHIP;

Заполнение её (.if_mode .id и др указывают место расположение ? т.е при таком подходе можно их местами менять ? )
Код
_WIZCHIP  WIZCHIP =
      {
      .id                  = _WIZCHIP_ID_,
      .if_mode             = _WIZCHIP_IO_MODE_,
      .CRIS._enter         = wizchip_cris_enter,
      .CRIS._exit          = wizchip_cris_exit,
      .CS._select          = wizchip_cs_select,
      .CS._deselect        = wizchip_cs_deselect,
      .IF.BUS._read_byte   = wizchip_bus_readbyte,
      .IF.BUS._write_byte  = wizchip_bus_writebyte
//    .IF.SPI._read_byte   = wizchip_spi_readbyte,
//    .IF.SPI._write_byte  = wizchip_spi_writebyte
      };

Работа с ней выглядит так
Код
WIZCHIP.CS._select();


т.е получается просто вызывается функция wizchip_cs_select()

Так вот чём преимущество такого подхода WIZCHIP.CS._select(); по сравнению с просто вызовом функции wizchip_cs_select(); ?
И на сколько дольше выполняется первый метод по сравнению со вторым?


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение May 5 2014, 21:59
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ViKo @ May 6 2014, 02:31) *
А разве может быть иное?

Да. Функция может не вызывать переданный ей параметр-функцию в процессе своей работыsm.gif
Может просто сохранить в переменной, например. Или возвращать адрес функции-параметра.

Цитата(GetSmart @ May 6 2014, 02:37) *
Неубедительно.

Вы не согласны с тем, что параметр функции qsort() является callback-ом? Так это не я придумал, это общепринято.
То, что вы с A. Fig Lee считаете callback'ом - это асинхронный callback, частный случай callback'а. Вот вам, например, статья про сравнение асинхронных и синхронных callback'ов. Там есть и определения для этих двух вариантов.

Цитата(GetSmart @ May 6 2014, 02:37) *
Всё-таки где отличия от параметра-функции или это 100% аналог?

Вот выше я привёл два примера функции-параметра, не являющихся callback'ами. Но обычно эти понятия синонимы.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 5 2014, 22:48
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AHTOXA @ May 5 2014, 16:59) *
Вы не согласны с тем, что параметр функции qsort() является callback-ом? Так это не я придумал, это общепринято.

CC2520 не является Zigbee трансивером, но в мануале она так обзывается.
Если нет факта callbacka, значит это не callback.
qsort, это ни какой ни бэк, это последовательная енумерация.
Без всяких коллов и бэков.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 7 2014, 10:53
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(A. Fig Lee @ May 6 2014, 04:48) *
Если нет факта callbacka, значит это не callback.

Голосуем. Кто за этот вариант? sm.gif
А то чёткость признаков отсутствует.

Цитата(amaora @ May 7 2014, 11:21) *
Файловая система например обычно на уровень выше драйвера устройства хранения.

Драйвер устройства хранения вызывает функции файловой системы?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2014, 11:40
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(GetSmart @ May 7 2014, 16:53) *
Голосуем. Кто за этот вариант? sm.gif

Да, это стопудово верный вариант. Осталось выяснить, что такое факты callback'а sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 7 2014, 13:17
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(AHTOXA @ May 7 2014, 17:40) *
Да, это стопудово верный вариант. Осталось выяснить, что такое факты callback'а sm.gif

Как в жизни. "Перезвони(те) мне" = асинхронность + разговор за чужой счёт (чужой тред). Плюс нет 100% гарантии, что перезвонит sm.gif

Сообщение отредактировал GetSmart - May 7 2014, 13:29


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2014, 18:28
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(GetSmart @ May 7 2014, 19:17) *
Как в жизни. "Перезвони(те) мне" = асинхронность + разговор за чужой счёт (чужой тред). Плюс нет 100% гарантии, что перезвонит sm.gif

Понятие асинхронности не связано с понятием обратного вызова. Обратный вызов - это просто направление.

Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так:
  • Вы звоните оператору сортировки (qsort company), и делаете заказ - отсортировать список гостей на свадьбу.
  • При этом вы сообщаете ему номер жены для консультаций о порядке сортировки (compare). Трубку не кладёте, ждёте результата.
  • Оператор в процессе сортировки перезванивает вашей жене другому номеру (compare) и уточняет (кого с кем посадить).
  • По окончании сортировки оператор сообщает вам результат.

Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный.

Добавлю, что понятие callback-функция появилось в программировании задолго до появления многозадачности и многопоточности.

Цитата(A. Fig Lee @ May 7 2014, 19:30) *
Кстати по поводу "qsort callback"
Это как "шампанское" "Советское шампанское".
Все называют. Хотя правильное определение шампанского, если спросить:


Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 7 2014, 18:37
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ May 7 2014, 21:28) *
Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный.

Переведите это на язык программы. Что значит "не кладете трубку" и что "кладете"? Из основной функции вызвали функцию сортировки (а она уже там колбэк), и уже никто ничего не ждет. rolleyes.gif Сортировка отработает и вернется туда, откуда вызвали. Разница может быть в том, что сортировка вернет некий код, в зависимости от которого будут выполняться следующие действия, или не вернет ничего. Так?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2014, 19:16
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ViKo @ May 8 2014, 00:37) *
Переведите это на язык программы. Что значит "не кладете трубку" и что "кладете"?

Очень просто. Если "не кладёте трубку" - все вызовы колбэков идут _до_ возврата из функции сортировки. Если "кладёте" - вызовы могут идти после возврата из функции сортировки.
То есть, мы из main() вызвали qsort(), qsort в процессе работы много раз вызвал compare(), отсортировал, и только после этого вернул управление в main(). Здесь compare - синхронный callback.
Второй вариант. Мы вызвали qsort_async(compare, done). Этот qsort вернул управление сразу, мы можем делать что-то другое. А qsort в это время работает, вызывает compare. Это уже асинхронные обратные вызовы. Ну и когда он отсортирует, он вызовет ф-ю done(). Такой callback называют completion routine.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- pokk   Структура функций   Feb 14 2014, 00:34
- - smalcom   >> т.е при таком подходе можно их местами ме...   Feb 14 2014, 10:16
- - _Pasha   Цитата(pokk @ Feb 14 2014, 04:34) Так вот...   Feb 14 2014, 13:57
|- - ar__systems   Цитата(_Pasha @ Feb 14 2014, 08:57) Код с...   Feb 17 2014, 16:36
- - AlexandrY   Цитата(pokk @ Feb 14 2014, 02:34) т.е пол...   Feb 14 2014, 14:14
- - pokk   Спасибо за помощь. Я примерно так и думал только г...   Feb 17 2014, 07:14
- - ViKo   Что такое callback функция? И в Википедии читал, и...   May 3 2014, 09:31
|- - aaarrr   Цитата(ViKo @ May 3 2014, 13:31) Что тако...   May 3 2014, 09:54
||- - ViKo   Цитата(aaarrr @ May 3 2014, 12:54) Это фу...   May 3 2014, 10:07
|- - doom13   Цитата(ViKo @ May 3 2014, 12:31) Что тако...   May 3 2014, 10:41
- - aaarrr   "передача исполняемого кода в качестве одного...   May 3 2014, 10:29
|- - ViKo   Цитата(aaarrr @ May 3 2014, 13:29) Хорошо...   May 3 2014, 10:50
||- - aaarrr   Цитата(ViKo @ May 3 2014, 14:50) В том и ...   May 3 2014, 11:08
||- - A. Fig Lee   Цитата(ViKo @ May 3 2014, 05:50) В том и ...   May 3 2014, 19:47
||- - ViKo   Цитата(A. Fig Lee @ May 3 2014, 22:47) Не...   May 3 2014, 22:01
||- - A. Fig Lee   Цитата(ViKo @ May 3 2014, 17:01) Обратно ...   May 3 2014, 23:10
|- - amaora   Цитата(aaarrr @ May 3 2014, 14:29) Хорошо...   May 5 2014, 18:22
|- - ViKo   Цитата(amaora @ May 5 2014, 21:22) Если г...   May 5 2014, 19:48
|- - amaora   Цитата(ViKo @ May 5 2014, 23:48) А если у...   May 7 2014, 05:21
- - Lagman   Callback функции часто встречаются в API библиотек...   May 3 2014, 10:46
- - ViKo   Handshake? По-моему, вы спекулянт (понятиями).   May 4 2014, 06:13
|- - AHTOXA   По-моему, callback - это просто. Например, есть фу...   May 4 2014, 06:29
|- - A. Fig Lee   Цитата(AHTOXA @ May 4 2014, 01:29) По-мое...   May 4 2014, 13:01
|- - AHTOXA   Цитата(A. Fig Lee @ May 4 2014, 19:01) не...   May 4 2014, 13:09
|- - A. Fig Lee   Цитата(AHTOXA @ May 4 2014, 08:09) Вы что...   May 4 2014, 15:10
|- - AHTOXA   Цитата(A. Fig Lee @ May 4 2014, 21:10) Не...   May 4 2014, 16:56
|- - A. Fig Lee   Цитата(AHTOXA @ May 4 2014, 11:56) Ага. Б...   May 4 2014, 18:36
- - ViKo   Что есть "обратный вызов"? По-моему, это...   May 4 2014, 18:19
|- - Tiro   Цитата(ViKo @ May 4 2014, 21:19) Что есть...   May 4 2014, 18:58
- - AHTOXA   Цитата(ViKo @ May 5 2014, 00:19) Что есть...   May 4 2014, 18:43
|- - ViKo   Цитата(AHTOXA @ May 4 2014, 21:43) Нормал...   May 4 2014, 18:55
||- - AHTOXA   Цитата(ViKo @ May 5 2014, 00:55) По-вашем...   May 4 2014, 19:48
||- - GetSmart   Цитата(AHTOXA @ May 5 2014, 01:48) Что ка...   May 5 2014, 19:22
|- - A. Fig Lee   Цитата(AHTOXA @ May 4 2014, 13:43) Ну хва...   May 4 2014, 23:54
|- - AHTOXA   Цитата(A. Fig Lee @ May 5 2014, 05:54) Ca...   May 5 2014, 05:26
|- - A. Fig Lee   Цитата(AHTOXA @ May 5 2014, 00:26) Неверн...   May 5 2014, 12:45
|- - AHTOXA   Цитата(A. Fig Lee @ May 5 2014, 18:45) Не...   May 5 2014, 16:58
|- - A. Fig Lee   Цитата(AHTOXA @ May 5 2014, 11:58) Если е...   May 5 2014, 19:35
- - ViKo   То есть, события, асинхронность - не при чем? Прос...   May 4 2014, 19:06
|- - Tiro   Цитата(ViKo @ May 4 2014, 22:06) То есть,...   May 4 2014, 19:10
|- - ViKo   Цитата(Tiro @ May 4 2014, 22:10) Вот у Ва...   May 4 2014, 19:17
|- - Tiro   Цитата(ViKo @ May 4 2014, 22:17) Возникло...   May 4 2014, 19:38
- - XVR   2 ТС - вы смешали в одну кучу назначение callback...   May 5 2014, 11:38
|- - ViKo   Цитата(XVR @ May 5 2014, 14:38) 2 ТС - вы...   May 5 2014, 12:12
|- - XVR   Цитата(ViKo @ May 5 2014, 16:12) Дайте уж...   May 5 2014, 13:39
- - ViKo   Из словаря. Не обязательно обратный вызов.   May 5 2014, 13:56
|- - A. Fig Lee   Цитата(ViKo @ May 5 2014, 08:56) Из слова...   May 5 2014, 15:42
- - XVR   Если из 'словаря', то это вариант 'д...   May 5 2014, 14:14
|- - ViKo   Цитата(XVR @ May 5 2014, 17:14) Если из ...   May 5 2014, 18:00
|- - XVR   Цитата(ViKo @ May 5 2014, 22:00) А мне по...   May 6 2014, 07:30
- - AHTOXA   Цитата(GetSmart @ May 6 2014, 01:22) А чт...   May 5 2014, 20:24
|- - ViKo   Цитата(AHTOXA @ May 5 2014, 23:24) Это та...   May 5 2014, 20:31
|- - GetSmart   Цитата(AHTOXA @ May 6 2014, 02:24) Это не...   May 5 2014, 20:37
|||- - ViKo   Цитата(AHTOXA @ May 7 2014, 22:16) Второй...   May 7 2014, 20:11
|||- - A. Fig Lee   Цитата(AHTOXA @ May 7 2014, 14:16) Очень ...   May 7 2014, 22:16
||- - GetSmart   Цитата(AHTOXA @ May 8 2014, 00:28) Мне не...   May 8 2014, 02:40
||- - dxp   QUOTE (AHTOXA @ May 8 2014, 01:28) Поняти...   May 10 2014, 14:40
|- - A. Fig Lee   Цитата(GetSmart @ May 7 2014, 05:53) Голо...   May 7 2014, 13:30
||- - GetSmart   Цитата(A. Fig Lee @ May 7 2014, 19:30) Вс...   May 7 2014, 13:40
|- - amaora   Цитата(GetSmart @ May 7 2014, 14:53) Драй...   May 7 2014, 16:39
- - AHTOXA   Цитата(ViKo @ May 8 2014, 02:11) Первый в...   May 8 2014, 08:08


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

 


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


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