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

 
 
 
Reply to this topicStart new topic
> Вызов функции по указателю
bezobraznic
сообщение Oct 30 2007, 08:49
Сообщение #1


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

Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441



Подскажите как вызвать функцию по указателю и как объявить указатель на функцию в CVAVR ?
Спасибо!!!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 30 2007, 09:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Наверное, так же, как и в других трансляторах

Объявление: тип (*pF)(параметры);
Присвоение: pF= funk1; // Что-то такое
Вызов (*pF)(параметры);
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 30 2007, 09:07
Сообщение #3


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Палыч @ Oct 30 2007, 12:01) *
Наверное, так же, как и в других трансляторах

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

М.б.
pF= &funk1;// smile.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 30 2007, 09:21
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

Имя функции является её адресом если после имени функции нет скобок с параметрами или без оных, поэтому & не нужен.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 30 2007, 09:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



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


Нет.
Присвоение: pF= funk1;
А вызов можно ещё и так: pF(параметры);
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 30 2007, 10:21
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Палыч @ Oct 30 2007, 12:34) *
Нет. Присвоение: pF= funk1;

pF = &funk1 и pF = funk1 - эквивалентны и дадут абсолютно одинаковый рез-тат.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 30 2007, 10:27
Сообщение #7


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



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

У меня такое же ущущение. smile.gif
Go to the top of the page
 
+Quote Post
bzx
сообщение Oct 30 2007, 13:20
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



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

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

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

даст такой же результат что и
Код
pbuf = buf;


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 30 2007, 13:36
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



А поддерживает ли такую фишку сам CV? Помню на заре моей юности мне не удалось сделать там указатель на функцию... но с той поры много воды утекло... Самое лучшее - посмотреть в хелпе компилятора.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
bezobraznic
сообщение Oct 30 2007, 14:20
Сообщение #10


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

Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441



Цитата(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);

}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:07
Рейтинг@Mail.ru


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