Помогите с указателями на функции при создании нового класса

Тема в разделе "Arduino & Shields", создана пользователем rwolker, 29 окт 2016.

  1. rwolker

    rwolker Нуб

    Ребят если не сложно объясните как можно использовать функцию из библиотеки CyberLib StartTimer1 в собственном классе, создаваемый класс выведен во внешний файл.
    Проблема с компиляцией возникает при вызове функции StartTimer1(blinc::t_count, 100000), не понимаю как нужно передать указатель на функцию blinc::t_count чтобы компилятор не ругался? Постоянно вылазит ошибка:
    ||=== Build: Arduino Duemilanove (328) in blincy (compiler: GNU AVR GCC Compiler) ===|
    mod_blinc.c||In member function 'void blinc::runus()':|
    mod_blinc.c|22|error: argument of type 'void (blinc::)()' does not match 'void (*)()'|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Ниже привожу код из которого убрал все лишнее, для конкретизации проблеммы:
    Код (C++):

    Это Основной файл blincy.ino
    #include <Arduino.h>
    #include "mod_blinc.h"
    /*
      Turns on an LED on for one second, then off for one second, repeatedly.
    */

    blinc my_blinc;
    void setup()
    {
        Serial.begin(9600);

        // initialize the digital pin as an output.
        // Pin 13 has an LED connected on most Arduino boards:
        pinMode(13, OUTPUT);
    }

    void loop()
    {
        my_blinc.runus();
    }
     
    Код (C++):

    Файл заголовков mod_blinc.h
    #ifndef mod_blinc_h
    #define mod_blinc_h
    #include <Arduino.h>
    #include <CyberLib.h>


    class blinc
    {
        public:
            blinc();
            void runus();
            void t_count();
            uint8_t timer_cnt;


    };

    #endif
    Код (C++):
    Файл с функцией blinc.c
    #include "mod_blinc.h"
    #include <Arduino.h>
    #include <CyberLib.h>


    blinc::blinc()
    {
        D13_Out;

    }

    void blinc::t_count()
    {
        timer_cnt++;
    }

    void blinc::runus()
    {


        D13_Inv;
        StartTimer1(blinc::t_count, 100000);
    }
     
  2. rkit

    rkit Гуру

    Никак. В качестве прерывания можно использовать только обычную функцию.