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

 
 
> Структура функций, В чём преимущество ?
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
Ответов
ViKo
сообщение May 4 2014, 06:13
Сообщение #2


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

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



Handshake? По-моему, вы спекулянт (понятиями).
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2014, 06:29
Сообщение #3


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

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



По-моему, callback - это просто.
Например, есть функция вывода jpg-картинки на экран. Она умеет декодировать картинку. Но не знает, как отрисовать пиксель на экране. Мы вызываем её, и в качестве параметра передаём указатель на функцию отрисовки пикселя.
Такой подход позволяет уменьшить связность программ.
Можно не передавать функцию в качестве параметра при вызове каждый раз, а передать её один раз при инициализации библиотеки.
Функция может выполняться в отдельном потоке. Тогда она будет вызывать наш callback асинхронно.
Но это уже частности, суть от этого не меняется.


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


Знающий
****

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



Цитата(AHTOXA @ May 4 2014, 01:29) *
По-моему, callback - это просто.
Например, есть функция вывода jpg-картинки на экран. Она умеет декодировать картинку. Но не знает, как отрисовать пиксель на экране. Мы вызываем её, и в качестве параметра передаём указатель на функцию отрисовки пикселя.
Такой подход позволяет уменьшить связность программ.
Можно не передавать функцию в качестве параметра при вызове каждый раз, а передать её один раз при инициализации библиотеки.
Функция может выполняться в отдельном потоке. Тогда она будет вызывать наш callback асинхронно.
Но это уже частности, суть от этого не меняется.

нет, это не callback. Это аналог виртуальной функции в C++, которая может быть подменена на ходу.
Callback всегда асинхронен. И всегда по какому то событию.

Цитата(ViKo @ May 4 2014, 01:13) *
Handshake? По-моему, вы спекулянт (понятиями).

Это абсолютно другое понятие.


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


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

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



Цитата(A. Fig Lee @ May 4 2014, 19:01) *
нет, это не callback. Это аналог виртуальной функции в C++, которая может быть подменена на ходу.
Callback всегда асинхронен. И всегда по какому то событию.

Вы что-то путаете. callback - это функция обратного вызова. И всё.


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


Знающий
****

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



Цитата(AHTOXA @ May 4 2014, 08:09) *
Вы что-то путаете. callback - это функция обратного вызова. И всё.

Нет гарантии что каллбэк синхронен. Именно поэтому он так и называется.
"Право на звонок" передается другому треду.
Если функция вызывается из того же треда то это не каллбэк.

Как там экономно такси вызывают? Звонишь на номер и отключаешся.
Ждешь каллбэк. Полная аналогия.


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


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

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



Цитата(A. Fig Lee @ May 4 2014, 21:10) *
Нет гарантии что каллбэк синхронен. Именно поэтому он так и называется.
"Право на звонок" передается другому треду.
Если функция вызывается из того же треда то это не каллбэк.

Ага. Было "Callback всегда асинхронен", теперь "Нет гарантии что каллбэк синхронен" sm.gif
Жду правильной версии: "Понятие асинхронности ортогонально понятию каллбэк" sm.gif
Суть калбэка - обратный вызов. Почитайте хоть википедию, там куча примеров синхронных каллбэков.
Могу примеры из WinAPI с синхронными каллбэками.


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


Знающий
****

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



Цитата(AHTOXA @ May 4 2014, 11:56) *
Ага. Было "Callback всегда асинхронен", теперь "Нет гарантии что каллбэк синхронен" sm.gif

А это одно и тоже. он асинхроннен, но в теории может совпасть.


Цитата(ViKo @ May 4 2014, 13:19) *
Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции.

Нет. Не то. Не понимаю, что не понятно?
Это не "туда обратно". Это аналогично прерыванию. Время события как правило неизвестно.
Поэтому ни какие "туда-обратно".
Это не "функция возвращающаяся назад".
И не "вызывающая другие функции".
У ембеддеров есть понятие прерывания, у десктопных или как вы их называете, обычных программеров прерывания нет.
Если ему надо переслать чтото в последовательный порт, он запишет данные в буффер,
вызовет функцию работы с портом, передаст туда аддресс callback функции и уйдет по делам делать другую работу.
Когда посылка завершится, система вызовет callback и передаст туда результаты.

Никакая это не "тудаобратно". И не "возвращающаяся назад"


--------------------
Верить нельзя никому, даже себе. Мне - можно.
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   Что есть "обратный вызов"? По-моему, это...   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
- - 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


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

 


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


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