- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: cout nicht deklkariert

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    58
    Beiträge
    1.195
    Anzeige

    Praxistest und DIY Projekte
    Also Hubert, wo C++ Funktionen (die man dort im Übrigen Methoden nennt, sofern sie zu einer Klasse gehören) mehr Speicher verbrauchen als C Funktionen musst Du mir mal erklären.

    Im Übrigen habe ich auf dem AVR schon einiges erfolgreich in C++ implementiert, würde aber, wegen den von Sprinter in dessen Wiki Artikel genannten Nachteilen, zu denen ich als größten die mangelnde Debugging Unterstützung im AVR Studio zählen würde, derzeit noch abraten.

    Um den Gebrauch von new und delete kommt man noch herum, die Standardbibliothek dabei zu haben wäre allerdings schick.

    Die Codequalität von avr-g++ ist genauso gut wie beim avr-gcc.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Das Plus an Speicherverbrauch und Laufzeit wirst du bemerken, wenn du VTables brauchst, also zB wenn du mit abstrakten Klassen arbeitest und auf deren Methoden zugreifst. Dann muss nämlich zur Laufzeit in der VTable nachgeschlagen werden, welche Methode zu nehmen ist. Weitere Gründe findest du im avr-gcc-Artikel.
    Disclaimer: none. Sue me.

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Als "Hallo Welt" ist eine Textausgabe schon recht kompliziert.
    was ist denn daran kompliziert? der Compiler muss doch nur den string "Hallo Welt" in den Flash reinkopieren und der controller soll diese Zeichen
    einfach nacheinander mit dem UART senden.

    wie soll man den sonst einen String mit dem UART senden?

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Naja, wenn die C++ Standardbibliothek fehlt musst du wohl auf Funktionen aus der C-Standardbibliothek zurückgreifen, also z.B. printf
    So viele Treppen und so wenig Zeit!

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    58
    Beiträge
    1.195
    Sprinter, das ist mir schon klar. Aber es ging um den Speicherverbrauch/Laufzeit von C++-Funktionen/Methoden und da gibt es kein "mehr als C".

    Die Verwendung von vtables bei virtuellen Methoden entspricht der von Funktionspointertabellen in C und ist von der Laufzeit zu dem C-Konstrukt identisch.

    Die Verwendung solcher Indirektionen macht auch in C Sinn - für genau dieselben Fälle wie bei C++ - ist aber von der Implementierung her ungleich aufwändiger und daher nur selten anzutreffen.

    Ohne virtual keine vtable und damit keine Indirektion und damit derselbe Speicherverbrauch/Laufzeit wie bei C.

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von p_mork
    mein eigentliches problem ist, dass ich nicht weiss, wie man in c++ folgendes realisiert:
    void irgendwas(a)
    {
    anweisung an den compiler: wann a ein float ist, dann f1(float a)
    wenn a ein int ist, dann f2(int a)
    u.s.w.
    }
    Die Funktionen void f1(float a) und void f2(int a) stehen irgendwo im Quelltext
    Ich weiß ja nicht, was du damit anstellen willst...

    In C++ Machst du eine Wrapper-Klasse, welche die gewünschte Funktion als virtuelle Mathode hat.
    Davon werden eine Integer und eine Float-Class abgeleitet, die ihre Vorstellung von f() implementieren.

    Es geht auch über eine union, aber dann programmierst du C mit C++.

    Wenn es denn Standard-Funktionen sein sollen, ist fprintf dein Freund, evtl fputs. Bau dir einen FILE file, der die Ausgabe auf den UART (oder wohin auch immer) implementiert und rufe dein fprintf (file, format, args...) auf wie gewohnt. That's it. Alternativ verbiegst du stdout oder stderr.

    @ogni42:

    Zum C++-Debuggen sollte auch ein avr-gdb gehen, evtl. mit GUI wie insight oder ddd. Die Frage ist, ob man sich mit gdb auseinandersetzen will. Mit silulavr gehts jedenfalls. Zum richtigen debuggen brauchts dann noch einen JTAG-Server oder 1DWire-Server.
    Disclaimer: none. Sue me.

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    58
    Beiträge
    1.195
    Sprinter, meinst Du mit siluavr vielleicht simulavr? Würde ich dann mal ausprobieren. gdb ist nicht das Problem, der hat mir schon manches mal das Programmiererleben gerettet.

    p_morg, so wie Du Dir das vorstellst geht es weder in C noch C++. Der Typ von a in irgendwas steht immer zur Übersetzungszeit fest. Wenn Du einen dynamischen Typ haben willst geht das in C++ über Vererbung und der Auswertung der Runtime Type Information, z.B. per dynamic_cast

    Code:
    class A
    {
     //....
    };
    
    class B
    {
     //....
    };
    
    class C : public A
    {
     //....
    };
    
    class D : public A
    {
     //....
    };
    int main()
    {
       A* a = 0;
       B  b;
       C  c;
       D  d;
       a = &c;
    
      if (dynamic_cast<C*>a != 0 ) // das wird funktionieren, Ergebnis ist true
      {
      }
    
      if (dynamic_cast<B*>a != 0 ) // das nicht, das Ergebnis ist false
      {
      }
    
      a = &d;
      if (dynamic_cast<C*>a != 0 ) // das funktioniert jetzt nicht, Ergebnis ist false
      {
      }
    
      
    }

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Jo simulavr. War'n Vertipper. Aber erwarte nicht zuviel davon.
    Disclaimer: none. Sue me.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test