реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Pic24F, Доступ к функциям в С30
Dimon999
сообщение Nov 12 2010, 10:04
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 29-04-10
Пользователь №: 56 968



Есть Pic24F и MPLAB C30
Имеется ряд функций, вызов которых не связан с передачей параметров, типа void Function (void)
Требуется создат массив указателей на эти функции (или что-то вроде этого). В процессе выполнения программы эти функции должны вызываться их по номеру. Массив должен формироваться при старте.
Кто-нибудь может подсказать формат этого массива, как его формировать и как вызывать эти функции из массива?
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 12 2010, 10:40
Сообщение #2


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(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" ;}


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Dimon999
сообщение Nov 12 2010, 12:52
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 29-04-10
Пользователь №: 56 968



Спасибо - заработало!
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 12 2010, 17:03
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(Dimon999 @ Nov 12 2010, 16:52) *
Спасибо - заработало!


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


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Абырвалг
сообщение Nov 15 2010, 20:36
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 23-08-06
Пользователь №: 19 752



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


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

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

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

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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 06:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016