Datum:
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)
#include <avr/io.h> #include <string.h> int main(void) { string test("Hallo Welt"); //Geht nicht string test2 = string("Hallo Welt"); //Geht auch nicht } |
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
Datum:
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.
Datum:
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.
Datum:
Ok! Danke. Gibts überhaupt dann eine Möglichkeit eine Art string zu verwenden? Also z.B. + Operator,dynamische Längenverwaltung,...
Datum:
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.
Datum:
Hallo ETStudent, versuchs mal damit: www.avr-cpp.de dein Code könnte dann ungefähr so aussehen
class Application : public Controller
{
protected: String test;
public: void onStart()
{
testAttribut="Hallo";
}
public: void onWork()
{
String lokal;
lokal= test + " Welt! ";
...
}
} app;
|
Gruß Jahat
Datum:
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.
Datum:
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?
Datum:
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.
Datum:
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.
Datum:
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.
Datum:
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
Datum:
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
Datum:
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 -.-