Перейти к содержанию
    

Есть Pic24F и MPLAB C30

Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void)

Требуется создат массив указателей на эти функции (или что-то вроде этого). В процессе выполнения программы эти функции должны вызываться их по номеру. Массив должен формироваться при старте.

Кто-нибудь может подсказать формат этого массива, как его формировать и как вызывать эти функции из массива?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть 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" ;}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо - заработало!

 

Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо?

Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо?

Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее.

 

Отвечу за Димона.

 

Например можно сделать кучу разных задач. Завести структуру, где будут, например, флаг необходимости запуска задачи, приоритет, счетчик времени для периодического запуска, период этого счетчика и собственно указатель на обработчик. Из структур сложить массив. В прерывании часов коротюсенькая программка однотипно считает периоды между вызовами всех задач, в суперлопе только одна функция менеджера задач, который будет запускать по необходимости обработчики. Это в самом простом виде, сверху можно еще чего навесить по необходимости.

 

Преимущества - программа дробится на кучу маленьких независимых частей, проще ориентироваться, изменять. Чем дальше обучаюсь, тем ширше использую массивы структур. Пока мне это видится удобным.

 

Для С30 такой подход кажется действительно тяжеловесным. А на какой нибудь С2000, ИМХО, удачно ляжет. Но если места и попугаев хватает, почему бы и нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...