Dimon999 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Есть Pic24F и MPLAB C30 Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void) Требуется создат массив указателей на эти функции (или что-то вроде этого). В процессе выполнения программы эти функции должны вызываться их по номеру. Массив должен формироваться при старте. Кто-нибудь может подсказать формат этого массива, как его формировать и как вызывать эти функции из массива? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Danis 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Есть Pic24F и MPLAB C30 Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void) Требуется создат массив указателей на эти функции (или что-то вроде этого). В процессе выполнения программы эти функции должны вызываться их по номеру. Массив должен формироваться при старте. Кто-нибудь может подсказать формат этого массива, как его формировать и как вызывать эти функции из массива? << Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void) Это строчка мне не очень понятна. Это код для VS (ПК), могу под С30 переделать? #include "stdafx.h" #include <iostream> using namespace std; typedef void (*FnPointer)(void); void Hello_Word_1(void); void Hello_Word_2(void); void Hello_Word_3(void); void (*UndefPoint)(void); int _tmain(int argc, _TCHAR* argv[]) { FnPointer fn[3]; fn[0] = Hello_Word_1; fn[1] = Hello_Word_2; fn[2] = Hello_Word_3; for(int i = 0;i < 3;i++) fn(); return 0; } void Hello_Word_1(void){ cout <<"Hello Word_1\n" ;} void Hello_Word_2(void){ cout <<"Hello Word_2\n" ;} void Hello_Word_3(void){ cout <<"Hello Word_3\n" ;} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimon999 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Спасибо - заработало! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Danis 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Спасибо - заработало! Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо? Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Абырвалг 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо? Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее. Отвечу за Димона. Например можно сделать кучу разных задач. Завести структуру, где будут, например, флаг необходимости запуска задачи, приоритет, счетчик времени для периодического запуска, период этого счетчика и собственно указатель на обработчик. Из структур сложить массив. В прерывании часов коротюсенькая программка однотипно считает периоды между вызовами всех задач, в суперлопе только одна функция менеджера задач, который будет запускать по необходимости обработчики. Это в самом простом виде, сверху можно еще чего навесить по необходимости. Преимущества - программа дробится на кучу маленьких независимых частей, проще ориентироваться, изменять. Чем дальше обучаюсь, тем ширше использую массивы структур. Пока мне это видится удобным. Для С30 такой подход кажется действительно тяжеловесным. А на какой нибудь С2000, ИМХО, удачно ляжет. Но если места и попугаев хватает, почему бы и нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться