www.mikrocontroller.net

Forum: Compiler & IDEs C++ mit WinAvr


Autor: Johngo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wie kann ich mit WinAvr C++ Programme für AVRs schreiben? Müssen dazu
z.B. irgendwelche Optionen im Makefile eingestellt werden?
danke,
Johngo

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

warum C++ auf einem AVR? Irgendwie fehlt mir da etwas das Verständnis.
Welche Vorteile versprichst Du Dir davon?

Die ganzen Anregungen zu C++ auf kleinen uCs stammen nach meiner
Erfahrung bisher lediglich aus den Marketing- oder Personalabteilungen,
aber nicht von den Entwicklern.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sehe ich anders und verwende C++ auf AVR.

Nur kann ich nicht mit einem passenden Makefile dienen, weil ich das
vorhandene nach gewissen schlechten Erfahrungen durch eine
selbstgestrickte dmake-Version ersetzt hab (kenne ich besser).

Das normale Makefile neigt dazu, bei C++ den Quellcode aus dem Weg zu
räumen. Also Vorsicht!

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@A.K.
Das Du das anders siehst ist gut und schön. Aber kannst Du auch die
Gründe dafür nennen. Es würde mir wirklich interessieren, weil mir
bisher die Vorteile nicht klar sind.

Warum sollte make den Quellcode löschen?

C++:
Unter Linux würde ich einfach den Compiler mit g++ aufrufen. Allerdings
habe ich gerade kein Windows laufen und weiß daher nicht wie das unter
WinAVR aussieht.

Autor: Johngo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@J.Z.:
C++, um die Vorteile einer objektorientierten Sprache zu nutzen, z.B.
bessere Strukturierung des Programmcodes, bessere Datenkapselung,
Vererbung,... . Und in vernünftigen Maßen und an den richtigen Stellen
eingesetzt, sollten eigentlich durch C++ auch nicht sehr viel
zusätzliche Rechenpower und Speicher nötig sein.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Warum sollte make den Quellcode löschen?"

Weil da eine Regel drin ist, die bei "make cleanup" oder so aehnlich
praktisch alles ausser dem Quelltext löscht. Unter der Annahme dass der
Quelltext ".c" heisst. Heisst er aber nicht.

Einfachster Weg also: Als .c bezeichnen und per GCC-Option trotzdem als
C++ übersetzen.

Autor: Dirk Milewski (avr-nix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeige doch ein Sourcecode. Also es würde bei Menues was bringen(?) wie
es bei Windows, aber sonst...?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stark eingedampftes Beispiel. Kein Zusatzaufwand gegenüber C, kommt hier
auch ohne vtbl aus (weil in meinem Fall nicht nötig, kann aber anderswo
für start/read sinnvoll sein):

class Temp {
    bool  valid () volatile const;
    temp_t  value () volatile const;
};

class DS18x20 : public Onewire, public Temp {
    error_t  start ();
    error_t  read ();
};

class LMx35 : public Temp {
    error_t  start ();
    error_t  read ();
};

Kann man alles auch in C machen. Aber ich finde es so eleganter.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zweites Beispiel. Datenstrukturen im ROM. Etwas AVR/GCC-spezifisch, weil
dort ja Datenzugriff auf Flash arg hässlich ist.

class PDescr {
    id_t  id () const PURE;
    void *  data () const PURE;
};

id_t
PDescr::id() const
{
    return pgm_read_byte(&d.id);
}

void *
PDescr::data() const
{
    return (void *) pgm_read_word(&d.ptr);
}

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@A.K.:
- bessere Strukturierung des Programmcodes,
Das ist mehr eine Frage der Selbstdisziplin der Programmierer.

- bessere Datenkapselung,
.dito, manchmal machen Programmierrichtlinien das unmöglich, aber
grundsätzlich klappt das auch in C. (Stichwort Modulare
Programmierung)

- Vererbung,... .
Ja. Das wäre ein Vorteil wenn man es den wirklich benötigt. Da fallen
mir spontan aber nur sehr wenige Anwendungen aus einem Bereich ein.

- zusätzliche Rechenpower und Speicher nötig.
Ja. Häufig das K.O. Kriterium. Bei vielen Projekten ist noch nicht
einmal möglich die stdio Funktionen aus der CLIB einzubinden, weil der
Speicher knapp ist.

Im Prinzip kann C++ alles was C auch kann. Also warum auch nicht.

Autor: Johngo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich kann man die meiste Funktionalität von C++ auch mit C
irgendwie selberstricken, aber wozu, wenn es einen C++ Compiler gibt,
der das viel schneller, besser und schöner kann.

Autor: Johngo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@A.K.
Welche Compileroptionen verwendest du für C++? Und kannst du mir auch
dein Makefile zukommen lassen?

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Weil da eine Regel drin ist, die bei "make cleanup" oder so aehnlich
>praktisch alles ausser dem Quelltext löscht. Unter der Annahme dass
>der Quelltext ".c" heisst...

Ursache dafuer ist wahrscheinlich die Option "adhlns" im
WinAVR/mfile-makefile. Thread zum Anlass genommen, einen
Aenderungsvorschlag auf Grundlage meiner "WinARM-Vorlage" an den
WinAVR-Macher zu senden. Falls Ursache richtig vermutet, wird der
Vorschlag hoffentlich in die naechste WinAVR-Makefile-Vorlage
uebernommen. Allerdings "beissen" sich einige CFLAGS zumindest mit
dem arm-elf-g++ (hauptsaechlich Warning-Einstellungen), duerfte beim
avr-g++ auch so sein, kann man einfach deaktivieren oder evtl. auch
einen zweiten Satz Optionen einfuehren (einen fuer C und einen fuer
C++). In der WinARM-Vorlage werden C und C++ getrennt abgearbeitet,
ohne die "automatische Umschaltung auf g++" durch das/den
Compiler-Frontend zu nutzen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist glaub' ich nur eine Stelle, es gibt noch eine gleichartige bei
»make clean«.

Die Lösung wäre, dass man nicht mehr so schöne einfache Muster
benutzt, um die .o-(und anderen) -Dateien von den Quelldateinamen
abzuleiten.  Ich muss da auch mal Mfile überarbeiten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.