Forum: Mikrocontroller und Digitale Elektronik Atmel Studio 6 und c++ strings


von ETstudent2012 (Gast)


Lesenswert?

Hallo zusammen

Laut der Hompage vom Atmel Studio soll dieses C++ unterstützen.

Leider klappt das bei mir im Bezug auf strings überhaupt nicht:

(Verwende einen ATMega32L)
1
#include <avr/io.h>
2
#include <string.h>
3
4
5
int main(void)
6
{
7
   string test("Hallo Welt");    //Geht nicht
8
   string test2 = string("Hallo Welt"); //Geht auch nicht
9
}

Wenn ich in der Informatik Vorlesung alles richtig verstanden habe,
dann sollte string eine Klasse sein. Und die sollte sich doch so 
erzeugen lassen, oder?

Mit meinen selbsterstellten Klassen geht das doch auch.

Aber der Compiler meckert immer:

'string' was not declared in this scope

Habe ich irgendein #include vergessen? Oder irgendwo einen Denkfehler


Danke

von Klaus W. (mfgkw)


Lesenswert?

In string.h sind die nicht die C++-Strings deklariert, sondern 
üblicherweise die C-Funktionen für nullterminierte Strings (auch wenn 
man in C++ für diese nicht <string.h>, sondern <cstring> nehmen sollte).

Die C++-string-Klasse wäre in <string> deklariert; die wiederum wirst du 
bei AVR vergeblich suchen - das wäre für so einen kleinen Kerl zu 
aufwändig und bräuchte dynamische Speicherallokierung, was ohnehin böse 
ist auf einem so knappen Rechner.

von Peter II (Gast)


Lesenswert?

ETstudent2012 schrieb:
> Habe ich irgendein #include vergessen? Oder irgendwo einen Denkfehler

ja hast du, in c++ gibt es erstmal gar keine strings. Du meinst 
vermutlich std::string das ist teil der STL. dafür gibt es den header 
<string>. Aber ich glaube kaum das er für die ATMega überhaupt verfügbar 
ist.

Ich bin mir sicher du willst es auch nicht auf einem AtMega verwenden, 
dann dafür braucht man eine dynamische speichervewaltung und diese 
kostet recht viele Resourcen und bringt viele neue Probleme.

von ETstudent2012 (Gast)


Lesenswert?

Ok! Danke.
Gibts überhaupt dann eine Möglichkeit eine Art string zu verwenden?
Also z.B. + Operator,dynamische Längenverwaltung,...

von Karl H. (kbuchegg)


Lesenswert?

ETstudent2012 schrieb:
> Ok! Danke.
> Gibts überhaupt dann eine Möglichkeit eine Art string zu verwenden?
> Also z.B. + Operator,dynamische Längenverwaltung,...

Wenn du dir selbst eine entsprechende Klasse schreibst - 
selbstverständlich.
Aber das Problem ist: Du willst auf alle Fälle dynamische 
Speicherverwaltung mittels new/delete vermeiden.
Aber es spricht zb nichts dagegen, dass du dir eine Stringklasse baust, 
die zb mit Strings konstanter Maximallänge (zur Not auch 2 oder 3 
verschiedene Maximallängen - Stichwort Templates) umgehen kann. So viele 
verschiedene Längen braucht man ja in der Praxis bei den relativ kleinen 
µC Programmen dann auch wieder nicht.
Das schränkt dann zwar die allgemeine Verwendbarkeit einer Stringklasse 
etwas ein, gibt dir aber auf der anderen Seite gewisse syntaktische 
Freiheiten.

Wobei man allerdings auch sagen muss: Die praktische Relevanz einer 
Stringklasse wird dann auch noch dadurch relativiert, dass Strings im 
Flash wiederrum als Sonderfall aufgefasst werden müssen. Wobei: Hmm, 
eigentlich ein guter Kandidat um mittels Polymorphie allgemeine 
stringverarbeitenden Funktionen so zu konditionieren, dass sie sowohl 
mit SRAM-Strings als auch mit Flash Strings umgehen können. Wenn da dann 
nicht wieder das Argument der Laufzeit wäre, welche man sich mit den 
virtuellen Aufrufen einhandelt.

von Jahat I. (jaib)


Lesenswert?

Hallo ETStudent,

versuchs mal damit: www.avr-cpp.de
dein Code könnte dann ungefähr so aussehen
1
class Application : public Controller
2
{
3
    
4
    protected: String test;
5
    
6
    public: void onStart()
7
    {
8
    testAttribut="Hallo";    
9
    }
10
    public: void onWork()
11
    {
12
      String lokal;
13
      lokal= test + " Welt! ";
14
      ...
15
    }
16
} app;

Gruß Jahat

von Rolf M. (rmagnus)


Lesenswert?

Peter II schrieb:
> ETstudent2012 schrieb:
>> Habe ich irgendein #include vergessen? Oder irgendwo einen Denkfehler
>
> ja hast du, in c++ gibt es erstmal gar keine strings.

Doch, natürlich gibt es die.

> Du meinst vermutlich std::string das ist teil der STL.

Nein. Die Bibliothek, die du meinst, ist die C++-Standardbibliothek, die 
Teil von C++ ist. Die STL ist die Basis, aus der diese früher mal 
entstanden ist.

Die Wikipädie erklärt's auf 
http://de.wikipedia.org/wiki/Standard_Template_Library sehr gut.

von Vlad T. (vlad_tepesch)


Lesenswert?

Jahat Iblis schrieb:
> Hallo ETStudent,
>
> versuchs mal damit: www.avr-cpp.de
> dein Code könnte dann ungefähr so aussehen

Das sieht an sich ja nicht schlecht aus, was ich aber nicht finden 
konnte:
wo kann man das Framework denn runterladen? oder wo gibts denn eine 
Klassenreferenz?

oder ist das ein fester Bestandteil von diesem SiSy Ding?

von Klaus W. (mfgkw)


Lesenswert?

Ich glaube ja nicht, daß diese Art von Programmierung auf einem AVR 
sinnvoll ist.

Wer bequem Strings herumschaufeln will, sollte vielleicht auf etwas wie 
BasicTiger von Wilke ausweichen.

von Jahat I. (jaib)


Lesenswert?

hallo ETStudent,

also das ist soweit ich sehe im SiSy vorcompiliert drin... ich kann mit 
dem sisy die Bibliotheken auch als UML Diagramme öffnen und daraus den 
C-Code generieren. ne kurze Referenz gibts hier: 
http://www.avr-cpp.de/doku.php?id=framework

Also um so mehr ich mich damit beschäftige finde ich schon dass man 
prima mit  dieser Art der Programmierung AVRs proggen kann. Man muss ja 
auch in C++ nicht Strings schaufeln wenn man nicht will :-D

Gruß J.

von Vlad T. (vlad_tepesch)


Lesenswert?

Jahat Iblis schrieb:
> ne kurze Referenz gibts hier:
> http://www.avr-cpp.de/doku.php?id=framework

das ist keine Referenz

Jahat Iblis schrieb:
> also das ist soweit ich sehe im SiSy vorcompiliert drin

damit ist es (zumindest für mich) komplett uninteressant.
wenn dann sollte es eine mit jedem Compiler benutzbare Bibliothek sein, 
die man einfach dem Projekt hinzufügt und die man auch selbst bauen 
kann.

Dann muss ich hinzufügen:
Durch SiSy bin ich vom Studium vorgeschädigt. Das hatten wir in den 
Software Engeneering Seminaren nutzen müssen. Das Ding war träge und 
total bugy.
Bei uns wurde gewitzelt: solche tools kommen also dabei raus, wenn man 
nach den da gelehrten Methoden Arbeitet.
Die benutzte Version war aber glaub ich damals (vor 9) schon ein paar 
Jahre alt.

von Jahat I. (jaib)


Lesenswert?

da sollte eigentlich eine Hilfedatei liegen aber der Link ist momentan 
off ... letztens ging der noch :-/ aber wie gesagt die Sourcecodes sind 
zumindest aus den UML-Modellen heraus generierbar das weiß ich genau... 
leider kenn ich mich mit der UML noch nicht wirklich so aus das wird 
aber mein nächster schritt :-) ...  soweit ich das aber gesehen habe ist 
das weitestgehend portabel. Somit sollte einem Einbinden in anderer 
Umgebungen nichts im Wege stehen.

also ich kenne nur die Demoversion die da zum download liegt und die 
funzt recht ordentlich... Gab es vor neun Jahren überhaupt schon UML?

Gruß Jahat

von Oliver (Gast)


Lesenswert?

Jahat Iblis schrieb:
> da sollte eigentlich eine Hilfedatei liegen

Na ja, in diesem Fall wäre ein Link auf eins der klassischen 
C++-Standardwerke besser geeignet. Denn generelle Verständnisfragen zu 
C++ lassen sich nunmal am besten mit RTFM lösen.

Oliver

von Vlad T. (vlad_tepesch)


Lesenswert?

Oliver schrieb:
> Na ja, in diesem Fall wäre ein Link auf eins der klassischen
> C++-Standardwerke besser geeignet. Denn generelle Verständnisfragen zu
> C++ lassen sich nunmal am besten mit RTFM lösen.

weil in jedem Standardwerk ja auch die Klassen des myAVR Frameworks 
beschrieben sind oder was -.-

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.