|
Структура функций, В чём преимущество ? |
|
|
|
Feb 14 2014, 00:34
|
Частый гость
 
Группа: Участник
Сообщений: 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(); ? И на сколько дольше выполняется первый метод по сравнению со вторым?
|
|
|
|
|
 |
Ответов
|
May 4 2014, 18:43
|

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

|
Цитата(ViKo @ May 5 2014, 00:19)  Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции. Нормальный перевод. Мы вызываем библиотечную функцию, она в процессе своей работы вызывает нас обратно, через переданную ей в качестве параметра функцию обратного вызова. Цитата(A. Fig Lee @ May 5 2014, 00:36)  А это одно и тоже. он асинхроннен, но в теории может совпасть. Ну хватит уже нести чушь. Вы неправильно понимаете, что такое callback. Вот пример синхронного калбэка: EnumWindowsЦитата BOOL WINAPI EnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam );
Parameters: lpEnumFunc [in] Type: WNDENUMPROC A pointer to an application-defined callback function. For more information, see EnumWindowsProc.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 4 2014, 23:54
|

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

|
Цитата(AHTOXA @ May 4 2014, 13:43)  Ну хватит уже нести чушь. Вы неправильно понимаете, что такое callback. Вот пример синхронного калбэка: EnumWindowsCallback ВСЕГДА асинхронный, строго говоря. и в этом случае тоже. Смысл в том, что мы передаем другой программе/объекту/кернелу/треду "управление". Что оно будет делать и когда нас позовет неизвестно. И EnumWindows не исключение. Другой вопрос, что вернется функция после вызова каллбэка. Но это чисто применение синхронизейшн примитивов. Точно так же можно позвать функцию передачи данных в сериал порт, передать туда каллбэк функцию, котораю будет сигналить объект, а мы после вызова нашей функции будем ждать этот обьект. И абсолютно асинхронный каллбэк "вдруг стал синхронным". На самом деле в обоих случаях сам каллбэк был асинхронным. Иначе это уже не будет то, что называют каллбэком Цитата(ViKo @ May 4 2014, 14:06)  То есть, события, асинхронность - не при чем? Просто передаем один из возможных методов (функций)? И что же тогда означает "callback"? Именно асинхронность и события причем. Вот я, например, написал библиотеку для связи через ethernet. Периодически она будет передавать данные из сети пользователю. Когда - неизвестно. Как пользователю получить данные? Типичное применение - при инициализации моей библиотеки он передает мне callback функцию, которую я буду звать, когда чтото прийдет. Цитата(AHTOXA @ May 4 2014, 14:48)  Что касаемо названия "callback". Вызов из пользовательской программы библиотечной функции - это нормальный вызов. Вызов наоборот - из библиотечной функции пользовательской функции - обратный вызов. Всё логично  Необязательно. Не всякая функция, которую вызывают через пойнтер, является каллбэком
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 5 2014, 05:26
|

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

|
Цитата(A. Fig Lee @ May 5 2014, 05:54)  Callback ВСЕГДА асинхронный, строго говоря. и в этом случае тоже. Неверно. Асинхронный - это кода управление вернулось после вызова, а вызовы callback-а продолжают поступать. В данном случае callback именно синхронный. Точно так же, как и в примере с сортировкой qsort. Ещё раз повторяю: callback и асинхронность - вещи ортогональные.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 5 2014, 12:45
|

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

|
Цитата(AHTOXA @ May 5 2014, 00:26)  Неверно. Асинхронный - это кода управление вернулось после вызова, а вызовы callback-а продолжают поступать. В данном случае callback именно синхронный. Точно так же, как и в примере с сортировкой qsort. Ещё раз повторяю: callback и асинхронность - вещи ортогональные. Нет. Он синхронный только потому что его принудительно синхронизировали. Такими вещами как WaitForSingleObject. То, что вы этого не видите, ничего не значит. Любой каллбэк можно засинхронизировать по отношению к вызывающей функции. Но он как был по сути асинхронным, так как мы не имеем никакого контроля над самим каллбэком, так и остался.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 5 2014, 16:58
|

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

|
Цитата(A. Fig Lee @ May 5 2014, 18:45)  Нет. Он синхронный только потому что его принудительно синхронизировали. Такими вещами как WaitForSingleObject. То, что вы этого не видите, ничего не значит. Любой каллбэк можно засинхронизировать по отношению к вызывающей функции. Если его засинхронизировали, то он синхронный. Если он синхронный, то он совершенно точно не асинхронный. По-моему, это очевидно. ЗЫ. Задание на дом - поищите скрытую асинхронность (такие вещи как WaitForSingleObject) в реализации callback-ов в функции qsort() например.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 5 2014, 19:35
|

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

|
Цитата(AHTOXA @ May 5 2014, 11:58)  Если его засинхронизировали, то он синхронный. Если он синхронный, то он совершенно точно не асинхронный. По-моему, это очевидно. Именно. Что сам по себе он всегда асинхронный. Чтоб был синхронным надо пляски с бубном. Пляски с бубном прямого отношения к каллбэку не имеют, но имеют к тому что он асинхронный. Приходится синхронизировать. А так да, можно все что угодно засинхронизировать. Цитата(amaora @ May 5 2014, 13:22)  А это как называется? Или где здесь событие? Нет никакого каллбэка здесь. Вызов функции через пойнтер есть. Абстракция есть. Виртуальная функция средствами С, так сказать.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
Сообщений в этой теме
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 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 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 AHTOXA Цитата(ViKo @ May 6 2014, 02:31) А разве ... May 5 2014, 21:59 A. Fig Lee Цитата(AHTOXA @ May 5 2014, 16:59) Вы не ... May 5 2014, 22:48  GetSmart Цитата(A. Fig Lee @ May 6 2014, 04:48) Ес... May 7 2014, 10:53   AHTOXA Цитата(GetSmart @ May 7 2014, 16:53) Голо... May 7 2014, 11:40    GetSmart Цитата(AHTOXA @ May 7 2014, 17:40) Да, эт... May 7 2014, 13:17     AHTOXA Цитата(GetSmart @ May 7 2014, 19:17) Как ... May 7 2014, 18:28      ViKo Цитата(AHTOXA @ May 7 2014, 21:28) Это по... May 7 2014, 18:37       AHTOXA Цитата(ViKo @ May 8 2014, 00:37) Переведи... May 7 2014, 19:16        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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|