-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Überladene Funktionen in C oder eine Alternative

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583

    Überladene Funktionen in C oder eine Alternative

    Anzeige

    Hi erstmal,

    da ich neben der "Mikrocontrollerei" auch noch Programmierung betreibe (C++, bald auch java), kenne ich vom C++ die Überladenen Funktionen

    dabei definiert man einfach die gleiche Funktion (Name gleich) mit unterschiedlichen Parametern hintereinander und das Programm wählt dann selbstständig aus, welche Funktion davon zu den mitangegebenen Parametern passt.

    Bei meinem Problem will ich eine Funktion schreiben, mit deren Hilfe der Benutzer Servos ansteuern kann

    er soll dabei aber nicht eine bestimmte Anzahl an Servos angeben müssen, und auch nicht aus verschiedenen Funktionen auswählen müssen

    ich möchte deshalb gerne irgendwie vom Programm erkennen lassen, wie viele Parameter die aufgerufene Funktion mitgesendet bekommen hat und daraufhinbedingt dann die verschiedenen Funktionen aufrufen, die dann die jeweilige Anzahl an Servos ansteuern


    Jetzt wäre das mit Überladenen Funktionen wirklich sehr leicht zu erfüllen, doch in C stehen diese leider nicht zur Verfügung


    Kann ich diese bei µCs verwenden oder kennt vielleicht jemand eine Alternative?

    (Es sollen pro Servo int-Werte übergeben werden)


    MfG Pr0gm4n

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Hallo Pr0gm4n,

    was spricht gegen C++?

    MfG Mark

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Hi,

    nichts, ich dachte nur, man kann bei µCs nur C verwenden, oder habe ich mich da geirrt?

    Wenn ja, muss ich da dann auch nur die AVR/io.h includen oder etwas anderes?


    MfG Pr0gm4n

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Einige Teile von C++ erzeugen ziehmlich langen Code oder benötigen viel RAM. Gerade wenn man die echt objektorientierten Teile benutzt erreicht man dann schnell die Grenzen der kleinen Controller. Auch sind nicht alle der include files für c++ geeigent.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.08.2005
    Beiträge
    178
    hallo,

    eine möglichkeit wäre es einen argumenten vektor (array) zu übergeben, so wie auch kommandozeilenparameter ins ('pc') programm kommen (bekannt als argv, oder args). und dann halt für jedes array element (servo stelldaten) die gewünschte(n) funktione(n) mittels schleife aufrufen. ein argc parameter äquivalent (argument count, länge des arrays) kannst du zur effizienzsteigerung natürlich auch implementieren.
    ich hoffe das war verständlich genug, ich schlafe nämlich bereits zu ca 85%

    gute nacht
    "A robot with guns for arms shooting a plane made out of guns that fires guns" - Nelson Muntz

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Zitat Zitat von Besserwessi
    Einige Teile von C++ erzeugen ziehmlich langen Code oder benötigen viel RAM. Gerade wenn man die echt objektorientierten Teile benutzt erreicht man dann schnell die Grenzen der kleinen Controller.
    Das ist ein weitverbreitetes Vorurteil. Wenn man nicht gerade alle Variablen dynamisch anlegt und nicht jede Methode virtuell deklariert kann man sehr effizienten Code erzeugen, der problemlos mit C mithalten kann. Die richtig speicherfressenden Sachen wie Exceptions kann man bei AVRs sowieso nicht benutzen. Außerdem muss er jan icht gleich objektorierntiert proggen, er wollt ja nur die Möglichkeit der Funktionsübeladung.


    MfG Mark

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    bezugnehmend auf das was johns gesagt hat kann man das so machen (zumindest am pc):
    Code:
    #include <stdarg.h>
    
    funktion(const char *fmt, ...)
    {
      va_list ap;
    
      va_start(ap, fmt);
        printf(text, fmt, ap);
      va_end(ap);
    }
    gruesse

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Jupp, so würde ich das auch machen...

    denn um Funktionen mit einer variablen Anzahl an Parametern zu realisieren muss man sie nicht überladen. Ein schönes Beispiel ist da z.B. printf, die funktioniert auch so.
    So viele Treppen und so wenig Zeit!

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Hi,

    das mit einem Array hab ich mir auch schon überlegt:

    man würde ein Array übergeben, mit sizeof() die anzahl der Elemente bestimmen und dann hätte man das gleiche Ergebnis

    da ich aber nun mal dem Benutzer das ersparen will (als Array übergeben) sollen Int-Werte übergeben werden


    den code von robocat verstehe ich jetzt nicht so ganz, sehe ich das richtig, dass im richtigen Programm dann kein "..." als Parameter steht?

    irgendwie verwirrt mich der Code an sich schon ziemlich^^


    Nun eine relativ entgültige Frage zum Überladen der Funktionen:

    Was muss ich includen und kann ich das jetzt definitiv hernehmen?


    wäre nett, wenn mir das noch jemand sagen könnte



    MfG Pr0gm4n

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Ach ja, ich hab da noch ne Frage, die Warscheinlich keines neuen Threads würdig ist, gibt es einen Delaybefehl, der so um die 1us zählen kann?

    Gibt es dazu noch eine Timeransteuerung, die sowohl auf ATMega 32 als auch auf ATMega 8 (und evtl. ATMega 16) geht?

    Ich würde die Timer gerne im Programm kalibrieren lassen, dazu brauche ich das


    MfG Pr0gm4n

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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