Указатели на функции?
- Войдите на сайт для отправки комментариев
Сб, 23/04/2011 - 22:08
Есть ли в Arduino, указатели на функции? Если есть, то если не затруднит, любой пример.
Есть ли в Arduino, указатели на функции? Если есть, то если не затруднит, любой пример.
Перед loop()
пишем саму функцию void arduinoru(X){код функции например над переменной Х++ и вывод на какой-то порт её}
Потом в самом loop() {
.....
текст программы создающая переменную Y, а дальше вызываем саму функцию и выдаём ей эту переменную Y
......
arduinoru(Y);
Можно и после loop(), помоему об этом чтото есть в разделе программирование
То, что было написано раньше - просто использование функции, и никак не указателя на функцию. Вот то, что Вы хотели - простой пример скетча с указателем на функцию:
При этом void (*Write)(char*); - сам указатель на функцию
Перед loop()
пишем саму функцию void arduino.ru(X) ...
Никогда не заработает - в имени функции нельзя использовать никаких символов кроме a..z A..Z 0..9 и символа подчёркивания, при этом цифра не может быть первым символом названия функции.
это был пример. Сейчас исправлю. Спасибо что подправили
До поста San4Es все понятно.
Пожалуйста расшифруйте :
void
(*Write)(char*);
Почему
Write в скобках? И для чего * в обоих случаях
?
Cпасибо.
void (*Write)(char*);
Почему Write в скобках? И для чего * в обоих случаях ?
Описание
говорит, что Write является указателем на функцию, которая возвращает значение типа void и параметр типа char*. Первые круглые скобки здесь необходимы; без них описание
говорило бы, что Write является функцией, возвращающей указатель на void, что, конечно, совершенно другая вещь.
Спасибо. А есть ли где нибудь об указателях на функции ? На arduino.cc ?
P.S. : Вот прекрасный ресурс для обучения , с конкретными примерами. ( на англ. языке , но все понятно ).
http://tronixstuff.wordpress.com/tutorials/
Там и учусь.
Указатели на функции и прочее с той же оперы - это, всё-таки, более к программированию и особенностям языка относится. На arduino.cc говориться только об основах и более апаратно-привязаных вещах. Ищите справочники по С..
Теперь понятно почему мне не приходилось, до сих пор, сталкиваться с такой конструкцией. Пасиб.
Подскажите пожалуйста,изучая библиотеку leOS ,пытаюсь создать указатель на функцию возвращающую значение unsigned char,выдает при проверке
invalid conversion from void(*)() to uint8_t(*)()
в самой бибе исправление внес, было
typedef void (*voidFuncPtr)(void);
void (*voidFuncPtr)(void);
изменил на
typedef uint8_t (*voidFuncPtr)(void);
uint8_t (*voidFuncPtr)(void);
ну и в функциях поправил. Все равно то же самое. вот скетч
с указателями на функцию столкнулся в первый раз.
invalid conversion from void(*)() to uint8_t(*)()
Где-то что-то не доменяли. И никто вам не поможет, так как только вы знаете ГДЕ выскакивает эта ошибка. Там же должна быть строка (только внимательно, нужно искать именно начало стека ошибок, а не его вершину). Смотрите кого оно пытается конвертировать. Кто там, на самом деле оказался void(*)(). Потом смотрите где этот "кто-то" объявлен. Как он объявлен и т.д.
Вы просто не забивайте себя страхом что это "указатели". В данном случае это ничем не отличается от "просто тип такой". Работайте с этим как будтно вы решили помеять, скажем тип переменной с char на unsigned long и у вас начала выскакивать ошибка "invalid conversion from char to unsigned long". Просто искать где-же этот чертов char остался :)
У Вас Image_Batary возвращает void, при этом указатель на функцию возвращает uint8_t. Соответственно присвоить второму первое нельзя. Вероятно Вы хотели в таск закинуть ReadBatary, хотя я не вижу никакой логики в этих действиях. Все что Вы хочете сделать делается елементарно без смены библиотеки
Вот примерно так можно сделать не изменяя библиотеку:
Большое спасибо всем,разобрался теперь.