Forum: Mikrocontroller und Digitale Elektronik Interrupt in Klasse


von Christian K. (christiankarle)


Lesenswert?

Hallo liebe Community,


ich habe folgendes Problem:


Ich möchte eine Klasse konstruieren, in welcher eine Methode aufgerufen 
wird, welche einen Timer startet.

Innerhalb der Klasse, soll es dann eine Methode geben, welche beim 
Überlauf ausgeführt wird.

Meine Frage: Wie macht man das am Besten?

C++

von Christian (Gast)


Lesenswert?

Interrupt Handle sind C-Funktionen und die lassen sich schwer in eine 
C++-Klasse unterbringen

Workarounds gibt es hier
http://www.mikrocontroller.net/articles/AVR_Interrupt_Routinen_mit_C%2B%2B

von Christian K. (christiankarle)


Lesenswert?

Ok, vielen Dank

Noch eine Frage, ich habe eine Klasse, mit Namen Test.

Diese Klasse besitzt keinen Default Konstruktor.

Um ein Objekt dieser Klasse zu erzeugen müssen jeweils zwei Pinnamen 
übergeben werden.

Wenn ich nun ein Objekt der Testklasse in einer anderen Klasse erzeugen 
möchte und dabei die Pinnamen übergeben möchte, wie müsste das aussehen?

von Peter II (Gast)


Lesenswert?

Christian K. schrieb:
> Wenn ich nun ein Objekt der Testklasse in einer anderen Klasse erzeugen
> möchte und dabei die Pinnamen übergeben möchte, wie müsste das aussehen?

einfach mit übergeben

1
//constructor
2
foo::foo( port, pin ) 
3
: bar( port, pin )
4
{
5
}
6
7
//oder mit festen parametern
8
9
//constructor
10
foo::foo() 
11
: bar( PORTA, PIN1 )
12
{
13
}

von Christian K. (christiankarle)


Lesenswert?

#include "DMX.h"
#include "mbed.h"

DMX dmx_interface;

int main ( void ) {

                                      //Application Code

    while ( 1 ) {

        dmx_interface.dmx.printf("Test");
    };
};



#ifndef DMX_H_
#define DMX_H_

#include "mbed.h"

class DMX {

    private:

        char dmx_data [ 512 ];

    public:

        DMX ( );
        ~ DMX ( );

        void dmx_interrupt ( void );

        Timer dmx_timer;
        Ticker dmx_ticker;

        Serial dmx ( PinName, PinName );
};

#endif



Frage: Wie weise ich Serial nun die Pins zu? Der Konstruktor benötigt 
zwei Pinnamen...

von Christian K. (christiankarle)


Lesenswert?

Fehler:


Error: A pointer to a bound function may only be used to call the 
function in "Main/Main.cpp", Line: 16, Col: 24

von Peter II (Gast)


Lesenswert?

[c]
class DMX {
    private:
        char dmx_data [ 512 ];
    public:
        DMX ( );
        ~ DMX ( );

        void dmx_interrupt ( void );
        Timer dmx_timer;
        Ticker dmx_ticker;
        Serial dmx;
};

DMX::DMX()
: Serial( PinName, PinName )
{ };

[c]

von Christian K. (christiankarle)


Angehängte Dateien:

Lesenswert?

Liefert folgende Fehler:

von Peter II (Gast)


Lesenswert?

Christian K. schrieb:
> Liefert folgende Fehler:

etwas mitmachen must du schon

Fehler
: Serial( PinName, PinName )

so müsste es sein
: dmx( PinName, PinName )


(dmx ist ein doofer namen für das Serial objekt)

von Christian K. (christiankarle)


Angehängte Dateien:

Lesenswert?

Ok, habe es abgeändert, macht natürlich Sinn.

Nun spuckt er mir allerdings den Fehler aus:

von Peter II (Gast)


Lesenswert?

Christian K. schrieb:
> Nun spuckt er mir allerdings den Fehler aus:

du musst den Port und pin hinschreiben, oder deiner Klasse selber als 
Parameter mitgeben.

Und bitte mal den aktuellen code mit posten, damit alle auf dem gleichen 
Stand sind.

von Der Andere (Gast)


Lesenswert?

Der lässt programmieren :-)

von Christian K. (christiankarle)


Lesenswert?

#ifndef DMX_H_
#define DMX_H_

#include "mbed.h"

class DMX {

    private:

        char dmx_data [ 512 ];

    public:

        DMX ( );
        ~ DMX ( );

        void dmx_interrupt ( void );

        Timer dmx_timer;
        Ticker dmx_ticker;
        Serial dmx;
};

#endif



#include "DMX.h"
#include "Configuration.h"

DMX :: DMX ( ) : dmx ( PinName, PinName ) { };

DMX :: ~ DMX ( ) { };

void DMX :: dmx_interrupt ( ) {

}

Wie meinst Du das?

von Christian K. (christiankarle)


Lesenswert?

Bin gerade erst dabei es zu lernen... Leider rennt man da oft gegen eine 
Wand...

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Christian K. schrieb:
> Bin gerade erst dabei es zu lernen... Leider rennt man da oft gegen eine
> Wand...
Du musst lernen solche Posts gekonnt zu ignorieren. Das kann wirklich 
Spaß machen ;D

von c-hater (Gast)


Lesenswert?

Christian K. schrieb:

> Bin gerade erst dabei es zu lernen... Leider rennt man da oft gegen eine
> Wand...

Ja, klar. Jeder hat mal angefangen und mit Problemen zu kämpfen gehabt.

Aber: nur wenn man selber nachdenkt und selber versucht, die Fehler 
zu beseitigen, kann man Programmieren lernen. Genau genommen besteht 
"Programmieren lernen" sogar genau darin.

von Eric B. (beric)


Lesenswert?

Christian K. schrieb:
> Ok, habe es abgeändert, macht natürlich Sinn.
>
> Nun spuckt er mir allerdings den Fehler aus:

PinName ist offensichtlich ein Typ oder eine Klasse. Du musst an der 
Stelle wo der Compiler meckert aber einen Wert von dieser Klasse als 
Parameter angeben. Vergleich sin(double) versus sin(3.14). Wie ein Wert 
von Typ PinName aussieht, findest du wahrscheinlich irgendwo in der 
Header-Datei "mbed.h".

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.