Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вызов функции через указатель

88K
02 декабря 2013 года
Glazkoff
3 / / 02.12.2013
Имею: CODEBLOC и STM32F2
Пишу:

void Led1_on(void); // прототип
void Led2_off(void); // прототип

void (*fun0)(void); // указатель
void (*fun1)(void); // указатель

int main(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph, ENABLE);

fun0 = &Led1_on;
fun1 = &Led2_off;

/* Configure PA2 in output pushpull mode */ // этот блок пропускаю

while (1)
{
//Led1_on(); // этот вариант работает
//Led2_off(); // этот вариант работает
(*fun0); // а этот нет :(
(*fun1); // а этот нет :(
}
}

void Led1_on(void)
{
GPIOA->BSRRL = GPIO_Pin_2; // Включили светодиод
}

void Led2_off(void)
{
GPIOA->BSRRH = GPIO_Pin_2; // Выключили светодиод
}


Компилятор ошибок НЕ выдаёт... :(
446
02 декабря 2013 года
Meander
487 / / 04.09.2011
Это потому, что не ты имеешь CODEBLOC и STM32F2, а они имеют тебя.
88K
02 декабря 2013 года
Glazkoff
3 / / 02.12.2013
Спасибо. Очень ценно!
446
02 декабря 2013 года
Meander
487 / / 04.09.2011
Что это - (*fun0); и это - (*fun1);, по твоему? А надо fun0(); и fun1();
27K
03 декабря 2013 года
mnanorn
78 / / 01.12.2013
Здравствуйте!

Все просто. Вы пишите:
 
Код:
fun0 = &Led1_on;
fun1 = &Led2_off;
Т.е., присваиваете указателям fun0 и fun1 адрес указателя на Led1_on и Led2_on, что не верно. Имя функции - само по себе указатель. Нужно так:
 
Код:
fun0 = Led1_on;
fun1 = Led2_off;
88K
03 декабря 2013 года
Glazkoff
3 / / 02.12.2013
Цитата:

fun0 = &Led1_on;
fun1 = &Led2_off;

fun0 = Led1_on;
fun1 = Led2_off;



Проверил, шо так, шо так - работает одинаково. :) (компилятор - gcc)

Ашипк была в том, что вместо (*fun0)() написал (*fun0).

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог