- LiFePO4 Speicher Test         
Ergebnis 1 bis 3 von 3

Thema: C++ / Klassenmethode speziell definieren

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795

    C++ / Klassenmethode speziell definieren

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    ich arbeite mit Visual C++ 2005 mit der .NET-Klsassenbibliothek.

    Ich habe mir ein kleines Serielles Protokoll gebastelt, welches dem
    CAN-Protokoll sehr ähnlich ist, nur dass man mehr als 8 Datenbytes
    senden kann.

    Dieses habe ich nun auf meinem µC implementiert. Jetzt möchte ich es gerne auch in meinem PC-Bedienprogramm implementieren.

    Dazu hätte ich gerne eine eigene Klasse.
    Die Klasse soll das komplette Protokollmenagement beinhalten.

    Die Kommunikation zur "Außenwelt" gehschieht mit folgenden
    Methoden der Klasse:

    Code:
    void SSP::TIMER( void );  //Wird im 1kHz-takt ausgeführt. Alles was laufend erledigt werden muss, wird hier gemacht
    
    void SSP::TX_MSG( unsigned int ID, unsignet int DLC, unsigned char data[] ); // Schreibt ein zu sendendes Paet in den Sendepuffer
    
    void SSP::RX( unsigned chat data ); // Empganene Bytes werden sofort dieser Methde übergeben!
    
    void SSP::TX( unsigned char data); // In dieser Methode steht die jewielige Sendefunktion des Systems
    
    void SSP::DO( unsigned int ID, unsignet int DLC, unsigned char data[] ); // Empfangene Pakete werden hier ausgewertet

    Nun zu meinem Problem:

    Je nach Anwendung, müssen die Methoden
    - void SSP::TX( unsigned char data);
    - void SSP:O( unsigned int ID, unsignet int DLC, unsigned char data[] );
    entsprechend definiert werden.

    Ich erstelle also mein Objekt mit:
    SSP ssp();

    Dann habe ich das Protokollmanagement als Objekt zur Verfügung.

    Jetzt möchte ich die Methode ssp.TX mit der entsprechenden FUnktion
    ( in WIN .NET serialport ) ausstatten, damit die Methode bei Aufruf
    die Datei versendet.

    Das lässt der Compiler aber nich tmit sich machen...

    Wie kann ich sowas geschickter lösten?


    Woraus ich bei diesen speziellen Methoden hinaus will:
    Erstellt man einen Button, dann kann man einen EventHeandler machen,
    indem man auch beliebigen Code einfügen kann.
    Ich hoffe ihr versteht was ich meine.

    Und genau das will ich bei diesen speziellen Methoden auch erreichen.
    Ich muss bei TX die Programmzeilen für das Senden des Bytes eingeben können,
    und bei DO natürlich die Befehle, die bei der jeweiligen ID des mepgangenen
    Pakes bestimmte Aktionen aufrufen.


    Bestimmt ist die Lösung wieder soo einfach.. aber im Moment komme ich
    leider nicht selbst drauf. Ich muss dazusagen, dass ich noch nicht so lange
    C++ programmiere. Ich komme von der C-Welt.
    Diese Sache würde ich jedoch sehr gerne ObjektOrientiert machen.

    Ich hoffe jemand kann mir da mit ein paar Tipps weiterhelfen.
    Gruß,
    Franz

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795
    ANDERE FRAGESTELLUNG:

    Ich habe jetzt eine Klasse SSPC, weilche alles managed.
    Diese vererbe ich dann meiner Form1.

    Jetzt hab ich noch ein Problem:

    Die Methode void SSPC::TX( unsigned char data );
    wird von der Klasse selbst aufgerufen.

    Der Inhalt dieser Methode muss jedoch angepasst werden.
    In Ihr soll eine Funktion SER_TX( unsigned char data ); stehen:

    void SSPC::TX( unsigned char data ){
    SER_TX( data );
    }

    SER_TX( data ) ist eine Methode von Form1.
    Welche ich ja bei der Classe SSPC noch nicht einfügen kann...

    Wie mach ich sowas am geschicktesten? Kann man eine
    Funktion per "Call by reference" aufrufen?

    Also quasi einen Zeiger(Element von SSPO) auf die Funktion
    SER_TX( data ) werfen, und diese dann so ausführen?

    Geht das? und Wie?
    Gruß,
    Franz

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    Ich hoffe das ich da halb wegs verstanden habe.

    Klasse zu verschlatet ist mein lieblings sport *kotz*

    Datei a.h

    class a
    {
    void FunktionA(void);
    void Init();
    }

    Datei a.cpp

    a::Init()
    {
    b::Init(this)
    }

    Datei b.h
    class a;

    class B
    {
    void Init(a* pA);
    }

    Datei b.cpp
    include "a.h"

    void Init(a* pA);
    {
    pA->FunktionA();
    }

    ich hoffe du verstehts den Code.
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen