Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Pic24F
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Dimon999
Есть Pic24F и MPLAB C30
Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void)
Требуется создат массив указателей на эти функции (или что-то вроде этого). В процессе выполнения программы эти функции должны вызываться их по номеру. Массив должен формироваться при старте.
Кто-нибудь может подсказать формат этого массива, как его формировать и как вызывать эти функции из массива?
Danis
Цитата(Dimon999 @ Nov 12 2010, 14:04) *
Есть 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[i]();

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
Спасибо - заработало!
Danis
Цитата(Dimon999 @ Nov 12 2010, 16:52) *
Спасибо - заработало!


Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо?
Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее.
Абырвалг
Цитата(Danis @ Nov 12 2010, 21:03) *
Пожалуйста, рад помочь! Только позвольте у Вас поинтересоваться, зачем это надо?
Указатели на функции в ПК еще понимаю, можно поработать. А в С30 для контроллера, где информационная емкость небольшая, + нет ООП, на мой взгляд, это лишнее.


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

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

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

Для С30 такой подход кажется действительно тяжеловесным. А на какой нибудь С2000, ИМХО, удачно ляжет. Но если места и попугаев хватает, почему бы и нет?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.