www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Direkte Signalgenerierung unter C++


Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bisher habe ich kaum Microcontrollerprojekte in C++ gesehen - deshalb 
wollte ich einfach mal diese Sprache für ein kleines AVR-Projekt 
ausprobieren.

Das habe ich dann mit einer Erarbeitung der direkten digitalen Synthese 
(DDS) für mich verbunden. Ich habe das Resultat in Form einer 
Ausarbeitung zusammengefaßt - vielleicht hilft es dem einen oder 
anderen.

Mein Fazit: C++ kann sich durchaus lohnen. Allein der objektbasierende 
Ansatz verhilft dazu, daß die Daten und die darauf arbeitenden Methoden 
"zusammengepackt" sind, womit zum einen keine explizite Übergabe von 
Adressen mehr nötig sind und zum anderen Fehlerquellen bei der 
Verwendung reduziert werden.
Übersichtlicher wird der Quellcode dadurch auf jeden Fall.

Für die DDS kann sich auch die volle Objektorientierung lohnen, indem 
das Funktionsprinzip und die Schnittstelle der DDS in einer Basisklasse 
implementiert wird, von der dann abgeleitete Klassen für die 
verschiedenen Signalformen (Sinus, Rechteck, Dreieck) abgeleitet werden.

http://www.knoerig.de/AVR-CPP.html#SinGen

Autor: Daniel T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rudi,

danke für deinen Beitrag. Ich hätte da noch ein paar Fragen...

1. Mit welchem Tool kann man diesen Code übersetzen?
2. Vermischt du in der main.c nicht c mit c++? Soweit ich weiß können 
dabei "unfindbare" Fehler auftreten.
3. Was steht in der main.cpp drin? Ist dies das gleiche Programm wie in 
der main.c nur in assembler?

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups... Es ist die main.c. Ich habe das Makefile von diesem Forum hier 
leicht angepaßt, aber es nicht so ganz hinbekommen daß er .cpp-Dateien 
verarbeitet.

Deshalb habe ich nach einigem Grummeln die Sache bei der main.c 
belassen....

Kann man bestimmt schöner hinbekommen, aber in Sachen Makefiles kenne 
ich mich nur grundlegend aus.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woran ist es gescheitert?
Hat make dir dauernd den Quelltext gelöscht?

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yep. So prinzipiell habe ich ja verstanden wie das Makefile arbeitet, 
aber so genau kenne ich mich mit den generischen Anweisungen nicht 
aus...
Jedenfalls habe ich das Handtuch geworfen, bin bei der main.c geblieben 
und habe mich der eigentlichen Aufgabe gewidmet.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Vektor mit der Sinustabelle ist auch noch doppelt definiert.

Aber irgendwie is das jetzt kein soooo überzeugender Einsatz von C++, um 
ehrlich zu sein :-/

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht auch auf die schlechte Adaption des Makefiles zurück - geplant 
war, aus dem Klassenobjekt ein "abgeschlossenes" Modul zu bauen.
Entnervt habe ich dann den Sinus-Vektor in die Deklaration übernommen.

Ich gebe offen zu - das Makefile hätte ich selbst noch einmal schreiben 
sollen!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Ärger hatte ich nämlich auch mal mit einem
Makefile aus dem Forum, als ich mit C++ arbeiten wollte.
Das Problem ist, daß ein Listing erzeugt werden soll, und
der Name dafür nur für *.c sinnvoll erzeugt wird.

In der Originalversion steht eine Zeile in der Art:
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
Mit dem $(<:.c=.lst) wird vom Dateinamen das .c am Ende weggenommen
und durch .lst ersetzt; der so erzeugte Name wird dann später
für das Listing benutzt.
Bei einer *.cpp wird nichts ersetzt, weil sie nicht auf .c endet,
und der Name des Listingfiles wird wundersamerweise identisch
mit dem des Quelltextes. Damit wird dann beim Kompilieren der
Quelltext zerstört :-(

Meine Korrektur sieht so aus:
CFLAGS += -Wa,-adhlns=$<.lst
Dabei wird dann nichts mehr ersetzt, sondern einfach .lst
angehängt. Zu a.c und b.cpp werden also die Listings a.c.lst und
b.cpp.lst erzeugt.

Vielleicht könnte man ja mal die Vorlage in der Art korrigieren?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Aber irgendwie is das jetzt kein soooo überzeugender Einsatz von C++, um
> ehrlich zu sein :-/


Aber für C auch nicht überzeugender :-)

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Klaus Wachtler: Werde ich demnächst unbedingt ausprobieren!
Der Makefile-Spezialist bin ich leider nicht....

Mea culpa - lastet der Programmiersprache nicht meine Übereiltheit mit 
der Doppeldeklaration an!

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.