-         

Ergebnis 1 bis 6 von 6

Thema: pointer auf methoden

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378

    pointer auf methoden

    Anzeige

    in einem anderen topic bin ich grad auf eine ganz bekloppte idee gekommen, nämlich die peripherie des µC in bibliotheken zu fassen und als structs zu schreiben

    Code:
    struct {
       word Port = 0;
       byte TxPin = 0;
       byte RxPin = 0;
       ...
       unsigned int BaudRate = 0;
       void init(word DPort, byte DTxPin, byte DRxPin)
       {
           ...
       }
       void setBauRate(unsigned int BR)
       {
           ...
       }
    } UART;
    die ISR wollte ich auch standartisieren und die daten in einen buffer leiten der auch über das struct erreichbar ist

    um aber die ISR nicht ganz unnahbar zu fassen wollt ich nen RPC einbauen, quasi eine methode an das struct übergeben, die aufgerufen wird, wenn z.B. die ISR behandelt wird

    so ungefähr wie die eventbehandlung unter cpp


    Code:
    ...
       tempbyte = readbyte();
       doByteReceived(tempbyte);
    ...
    
    void doByteReceived(byte data)
    {
       if ("function-pointer" != null) "function-pointer"(data);
    }
    leider finde ich im moment nur begrenzt informationen wie ich das mittels winavr bewerkstelligen kann, hab bisher gerne die makros verwendet die mir von der entwicklungsumgebung gestellt wurden um sowas zu machen ^^

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Du meinst eine CALLBACK Funktion?

    Das sollte in C eigentlich gehen

    void (*function)(int,int);

    habs aber selber noch nie am µC probiert

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    mh ich probiers mal und preäsentier später mal ne rohversion meines structs

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Code:
    typedef long CBPtr(int, int);
     
    typedef struct test
    {
    	int id;
    	CBPtr *callback;
    } test;
    
    long callback_func( int a, int b)
    {
    return a+b;;
    }
    
    int main()
    {
    ...
    test test1;
    
    test1.id = 100;
    test1.callback = callback_func;
    ...
    }
    hat zumindest erst mal beim Übersetzen nicht gemeckert

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.07.2009
    Ort
    Wien
    Beiträge
    131
    das mit den functionpointern geht definitiv, ich verwend hier sowas:

    Code:
    struct behaviour {
      uint8_t(*run)(uint8_t); // function for that behaviour
      uint8_t active;
    } behaviours[] = {
      { behaviour_escape_bumpers, 1 }, // escape based on bumpers
    ...
    };
    
    uint8_t behaviour_escape_bumpers(uint8_t inactive) {
    ...
    }
    
    void main(void) {
    ...
      for(struct behaviour *bp = behaviours; bp->run; bp++) {
        if(bp->active && bp->run(active))
          active = 1;
        }
      }
    ...
    }

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    ist ja geil ^^ dann werd ich mal sehen dass ich morgen ein wenig zeit in das UART struct stecke ^^ ... heute hab ich genug stress mit endian format, prüfsummen und kleinen programmierpannen gehabt

Berechtigungen

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