Forum: Mikrocontroller und Digitale Elektronik Probleme: C++ Programmierung MEGA 2560


von (unknown) (Gast)


Lesenswert?

Hey,
ich benötige unbeding Hilfe bei einem laufenden Projekt.

Zum Projekt:
Ich entwickle einen Prüfcomputer welcher Kabel, auf richtiger 
Verbindung, prüfen soll. Mann kann über ein Tochdisplay ein Kabel 
auswählen und daraufhinn startet der µC seine Prüfung (welche auf das 
Kabel zugeschnitten ist).

Mein Problem:
Ich habe in Visualstudio 7 ein Programm geschrieben wo ich meine 
Probleme über Vektoren löse und die Ausgabe der Ergebniss über Streams 
löse. Jetzt wollte ich in Atmel Studio alles einbinden und auf den µC 
ummünzen jedoch kann ich hier keine vektoren anlegen. Und jetzt habe ich 
gelesen das C++ wohl nicht empfehlenswert für µC sei????

Ich würde mich sehr freuen wenn mir jemand Helfen kann.

Mit freundlichen Grüßen
Dennis

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dennis T. schrieb:
> auf den µC ummünzen jedoch kann ich hier keine vektoren anlegen.
Warum nicht? Welche Fehlermeldung bekommst du mit welchem Code?

von Vincent H. (vinci)


Lesenswert?

Das ist ein Problem der eingebundenen Bibliothek, nicht der Sprache. Die 
Behauptung, C++ sei nicht empfehlenswert ist somit falsch.

Nicht empfehlenswert für ein Target mit so wenig Flash ist
- das einbinden von iostream
- die Nutzung von Vektoren, die ihren Element Typ am Heap anlegen

Mich wundert ehrlich gesagt, dass das compilierte Binary mit iostream 
überhaupt in den Mega reinpasst?

von Wilhelm M. (wimalopaan)


Lesenswert?

Dennis T. schrieb:

> Mein Problem:
> Ich habe in Visualstudio 7 ein Programm geschrieben wo ich meine
> Probleme über Vektoren löse und die Ausgabe der Ergebniss über Streams
> löse. Jetzt wollte ich in Atmel Studio alles einbinden und auf den µC
> ummünzen jedoch kann ich hier keine vektoren anlegen. Und jetzt habe ich
> gelesen das C++ wohl nicht empfehlenswert für µC sei????

Du hast für die Plattform avr keine Standard-C++-Bibliothek zur 
Verfügung! Je nach Anforderung ist das aber schnell selbst gemacht ...

Zum Thema C++/C eine persönliche Meinung: C++ ist m.E. grundsätzlich 
besser geeignet, ob µC oder nicht spielt keine Rolle - denn es ist eine 
multi-Paradigmen-Sprache: man sucht sich das Passende aus ;-)

von Alabama J. (alabamajack)


Lesenswert?

Dennis T. schrieb:
> geschrieben wo ich meine

Erstmal deutsch schreiben lernen.

Dennis T. schrieb:
> Jetzt wollte ich in Atmel Studio alles einbinden und auf den µC
> ummünzen jedoch kann ich hier keine vektoren anlegen. Und jetzt habe ich
> gelesen das C++ wohl nicht empfehlenswert für µC sei????

Stimmt nicht. Bei Vektoren musst du halt aufpassen was du machst, nicht 
das du auf einmal aufm Heap zu viel Speicher allokierst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dennis T. schrieb:
> Und jetzt habe ich gelesen das C++ wohl nicht empfehlenswert für µC
> sei????
Was man nicht alles liest...

Aber der Witz ist eher: dein schnuckeliger µC hat gerade mal 8kByte 
Arbeitsspeicher, wogegen dein PC gut zweihunderttausendmal mehr davon 
hat (und den dann bei Bedarf auch noch virtuell erweitern könnte). Du 
erkennst das Problem?

: Bearbeitet durch Moderator
von (unknown) (Gast)


Lesenswert?

Vielen Dank für die schnellen Antworten.
Ich merke gerade das bei mir wohl noch sehr viel Wissen fehlt. Leider 
habe ich nur einen Crashkurs in C/C++ bekommen und µC habe ich mir 
selber ein wenig beigebracht.

von (unknown) (Gast)


Lesenswert?

Kommt jemand aus dem Norddeutschen Raum und könnte mir eventuell hier 
eine Hilfestellung sein??? Da ich nicht so richtig weis wie ich jetzt am 
besten weiter arbeiten kann.
Ich würde gerne den Prüfcomputer (Hardware) vorstellen, mit erstellten 
Platinen (Überspannungschutz Optokoppler, Spannungsversorgung...). und 
meinen Gedachtenverlauf zur Fertigstellung des Prüfcomputers.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Dennis T. schrieb:
> Ich würde gerne den Prüfcomputer (Hardware) vorstellen, mit erstellten
> Platinen (Überspannungschutz Optokoppler, Spannungsversorgung...). und
> meinen Gedachtenverlauf zur Fertigstellung des Prüfcomputers.

Kannst Du das nicht einfach auf einen Raspi portieren?

von Peter II (Gast)


Lesenswert?

Dennis T. schrieb:
> Kommt jemand aus dem Norddeutschen Raum und könnte mir eventuell hier
> eine Hilfestellung sein??? Da ich nicht so richtig weis wie ich jetzt am
> besten weiter arbeiten kann.

du kannst auch gerne dein C++ Programm einfach anhängen.

Wenn das nicht geht, dann lass doch den Vektor und stream mal weg und 
stell uns konkrete frage wie man es ohne umsetzen kann.

Was sollte dann der µC überhaupt machen?

von Nop (Gast)


Lesenswert?

Dennis T. schrieb:
> Und jetzt habe ich
> gelesen das C++ wohl nicht empfehlenswert für µC sei????

Da sind die Meinungen gespalten; um die Diskussion darüber jetzt hier 
nicht ausarten zu lassen, daher nur die Fakten.

1) wenn man C++ auf µC verwenden will, dann muß man sich überlegen, 
welche Untermenge von C++ dafür geht. Es gibt etliche Leute, die 
eigentlich nur "C+" wirklich verwenden, also C mit Klassen.

2) C++ hat den Grundsatz, daß Du nicht bezahlst, was Du nicht benutzt. 
Allerdings bezahlst Du sehr wohl das, was Du benutzt.

3) manche der Features von C++, die über C hinausgehen, kosten auf dem 
Target gar nichts, weil das alles zur Compilezeit aufgelöst wird. Diese 
Features sind das Hauptargument, wieso Leute C++ auf µC verwenden, ohne 
daß sie Ressourcenprobleme kriegen.

4) das gilt aber nicht für alle Features, besonders nicht, wenn man auch 
STL und Boost verwendet. Je nachdem, was man da verwendet, kann das mit 
wenigen Zeilen einen Riesenbatzen nach sich ziehen - genau diese 
Abstraktion ist schließlich der Sinn dahinter.

5) Schlußfolgerung: um mit C++ auf µC zu programieren, reicht es nicht 
aus, wenn man weiß, wie man was benutzt. Man muß zusätzlich auch wissen, 
was im Hintergrund dann abläuft. Die Abstraktion, die C++ bietet, dient 
zwar der Bequemlichkeit im Programmieren, aber nicht der Bequemlichkeit 
im Erlernen. Blackbox-Programmierung funktioniert mit C++ nicht auf µC.

von (unknown) (Gast)


Angehängte Dateien:

Lesenswert?

Auch für den Raspberry fehlen mir leider die Grundlagen.

Ich versuche mal das Problem zu schildern:
Meine Absicht ist es verschiedene Bauteile auf Funktion zu prüfen. Die 
Bauteile sind in Handarbeit verdrahtet worden und haben leider des 
öfteren Fehler in der Verdrahtung, welche ich feststellen muss.
Ich habe einen Arduino Mega 2560 und ein Nextion Display zur Verfügung 
gestellt bekommen womit ich das Problem meiner Techniker Abschlussarbeit 
lösen soll.

Denn C-Code habe ich angehängt.
Mit der von mir ausgelagerten Define Header.


Vielen Dank für Eure Mühe
Dennis

von Peter II (Gast)


Lesenswert?

Dennis T. schrieb:
> Vielen Dank für Eure Mühe

warum schreibt du C++ code in TXT Dateien? Hängt doch bitte die echte 
Endung an, dann kann man den code auch schön sehen.

von (unknown) (Gast)


Angehängte Dateien:

Lesenswert?

Hier die richtige Datei hoffe ich

von Peter II (Gast)


Lesenswert?

ich finde gar nichts mit Vektor?`
1
void loesch( int kreuztest_array [],int verbidung_array [],int ergebnis_messung_array[])    // Löscht alle Arrays
2
{
3
 verbidung_array [29];
4
 ergebnis_messung_array[28];
5
}

das macht nichts sinnvolles

von Peter II (Gast)


Lesenswert?

Dennis T. schrieb:
> Hier die richtige Datei hoffe ich

nein, der Inhalt war richtig nur der Dateiname ist falsch.

von (unknown) (Gast)


Angehängte Dateien:

Lesenswert?

Die habe ich wieder rausgenommen.
Ich stelle mein aktuelles Projekt gleich online.

von Peter II (Gast)


Lesenswert?

das ist aber auch böse
1
i=i++;

von (unknown) (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist der Code welcher ohne vektoren erstellt ist.
Jetzt wollte ich die Arrays eigentlich gegen Vektoren austauschen damit 
sie wie in der Funktion loesch(); nicht neu auf null Initialisiert 
werden muss, sondern das ich sie einfach löschen kann. Und in der 
Laufzeit möchte ich gerne die Array's in der Größe anpassen.

von Peter II (Gast)


Lesenswert?

Dennis T. schrieb:
> Jetzt wollte ich die Arrays eigentlich gegen Vektoren austauschen damit
> sie wie in der Funktion loesch(); nicht neu auf null Initialisiert
> werden muss, sondern das ich sie einfach löschen kann.
das macht überhaupt keinen sinn. lösche sie mit memset und gut ist.

> Und in der
> Laufzeit möchte ich gerne die Array's in der Größe anpassen.
nein, was willst du nicht wirklich auf einem µC machen. Welchen Grund 
gibt es dafür das du die größe anpassen willst?

Auch sollte du deine Stringverarbeitung überdenken, die ist viel zu 
fehleranfällig. Srings ende bei C auf 0 und nicht auf \n.

von physiker (Gast)


Lesenswert?

Erster Eindruck (sorry): Kraut und Rüben
Bitte vernünftige und einheitliche Bezeichner, also z.B.
"loesch" loescheArrays
"Ausgang_high/low" setzeAusgang(X,HIGH/LOW)
vielleicht englische Bezeichner? setPort(...) Ist ueblicher und meist 
kürzer.
Warum gibt es kein getPort(...) statt dieser endlosen if verzweigungen. 
Warum kein case?

Sinnvolle Kommentare beschreiben warum etwas gemacht wird aber nicht 
nochmal mit Worten was der Quelltext tut:
while ((zeichen!='#')||(i==25));  // Zeichen ungleich # oder i =25

Magic numbers überall, was ist hier z.B. 25. Sieht man das auf den 
ersten Blick

...

von (unknown) (Gast)


Lesenswert?

Ja ich habe schon verstanden das ich da sehr viele Probleme habe. Nur 
finde ich keinen guten Leitfaden wo ich mich entlangarbeiten kann.

Ich hatte gedacht wenn ich einen Manuellen Test eingeben wollte also zum 
Beispiel 5 Adern überprüfen möchte das ich das Array auf die Anzahl der 
Adern einstellen kann.

von Peter II (Gast)


Lesenswert?

Dennis T. schrieb:
> Ich hatte gedacht wenn ich einen Manuellen Test eingeben wollte also zum
> Beispiel 5 Adern überprüfen möchte das ich das Array auf die Anzahl der
> Adern einstellen kann.

warum? Wenn es maximal 10 Adern gibt, dann legt man das Array mit 10 
Elementen an, wenn davon nur 5 für einen Test genutzt werden ist doch 
auch alles gut.

von (unknown) (Gast)


Lesenswert?

get port();  set port(); sind mir keine Begriffe gewesen, als ich 
angefangen habe. Naja und jetzt kommen immer andere Ideen doch leider 
komme ich so nicht weiter bzw zum Abschluss.
Weshalb ich Hilfe suche die mich auf einen richtigen Weg leiten kann. 
Muss ja auch nicht alles gratis passieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.