Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вызов функции по указателю
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
bezobraznic
Подскажите как вызвать функцию по указателю и как объявить указатель на функцию в CVAVR ?
Спасибо!!!
Палыч
Наверное, так же, как и в других трансляторах

Объявление: тип (*pF)(параметры);
Присвоение: pF= funk1; // Что-то такое
Вызов (*pF)(параметры);
alexander55
Цитата(Палыч @ Oct 30 2007, 12:01) *
Наверное, так же, как и в других трансляторах

Объявление: тип (*pF)(параметры);
Присвоение: pF= funk1; // Что-то такое
Вызов (*pF)(параметры);

М.б.
pF= &funk1;// smile.gif
IgorKossak
Цитата(alexander55 @ Oct 30 2007, 11:07) *
М.б.
pF= &funk1;// smile.gif

Имя функции является её адресом если после имени функции нет скобок с параметрами или без оных, поэтому & не нужен.
Палыч
Цитата(alexander55 @ Oct 30 2007, 13:07) *
М.б.
pF= &funk1;// smile.gif


Нет.
Присвоение: pF= funk1;
А вызов можно ещё и так: pF(параметры);
defunct
Цитата(Палыч @ Oct 30 2007, 12:34) *
Нет. Присвоение: pF= funk1;

pF = &funk1 и pF = funk1 - эквивалентны и дадут абсолютно одинаковый рез-тат.
alexander55
Цитата(defunct @ Oct 30 2007, 13:21) *
pF = &funk1 и pF = funk1 - эквивалентны и дадут абсолютно одинаковый рез-тат.

У меня такое же ущущение. smile.gif
bzx
Цитата(defunct @ Oct 30 2007, 13:21) *
pF = &funk1 и pF = funk1 - эквивалентны и дадут абсолютно одинаковый рез-тат.

Такая же фишка и со строкими:
Код
char buf[], *pbuf;

Запись
Код
pbuf = &buf[0];

даст такой же результат что и
Код
pbuf = buf;
GDI
А поддерживает ли такую фишку сам CV? Помню на заре моей юности мне не удалось сделать там указатель на функцию... но с той поры много воды утекло... Самое лучшее - посмотреть в хелпе компилятора.
bezobraznic
Цитата(GDI @ Oct 30 2007, 17:36) *
А поддерживает ли такую фишку сам CV? Помню на заре моей юности мне не удалось сделать там указатель на функцию... но с той поры много воды утекло... Самое лучшее - посмотреть в хелпе компилятора.



Уже нашёл в хелпе(раньше не было)

Pointers to functions always access the FLASH memory area. There is no need to use the flash keyword for these types of pointers.

Example:

/* Declare a function */

int sum(int a, int cool.gif {

return a+b;

}

/* Declare and initialize a global pointer to the function sum */

int (*sum_ptr) (int a, int cool.gif=sum;

void main(void) {

int i;

/* Call the function sum using the pointer */

i=(*sum_ptr) (1,2);

}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.