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++
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
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?
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 | }
|
#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...
Fehler: Error: A pointer to a bound function may only be used to call the function in "Main/Main.cpp", Line: 16, Col: 24
[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]
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)
Ok, habe es abgeändert, macht natürlich Sinn. Nun spuckt er mir allerdings den Fehler aus:
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.
#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?
Bin gerade erst dabei es zu lernen... Leider rennt man da oft gegen eine Wand...
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.