Direkte Signalgenerierung unter C++

Gast #1662213
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
Gast #1662493
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?
Gast #1662774
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.
#1662814
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:
1
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:
1
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren