Hallo ihr alle, für ein komplexes Embedded-System möchte ich mehrere Untersysteme bilden, die jeweils einer Klasse entspringen. Jedes System arbeitet z.B. im Zustand INIT ein eigenes Programm ab. Class Untersystem { public: void statemachine (void); private: enum state; } Untersystem Untersys0 Untersystem Untersys1 Untersystem Untersys2 Nun mein Problem: Alle Unterprogramme haben den selben Rahmen, sie sind eine Statemachine mit den Zuständen BEGIN, STATE1, STATE2, END. Also möchte ich gerne eine Klasse machen, die für jedes Untersystem und jeden state instanziert wird. Class SubProgram { public: void runMe (void); private: enum SubState; } Im Idealfall möchte ich, dass in der Methode Untersys0.statemachine() nur noch steht: { SubSubProgram[state].runMe(); } * Kann ich dazu in die Klasse SubProgram einfach SubProgram SubSubProgram[n] eintragen? * Was passiert, wenn die Instanz [n] gar nicht existiert? Kann ich mich dagegen schützen? Vielen Dank im Voraus, Frank
if (! SubSubProgram[state] ) { SubSubProgram[state] = new ... } SubSubProgram[state].runMe();
Bei komplexen Zustandsmaschinen hilft das State-Machine-Pattern: http://www.eventhelix.com/RealtimeMantra/HierarchicalStateMachine.htm
Danke, Peter! Sehe ich es richtig, dass die Klasse so zur Laufzeit im RAM instanziert wird und nicht wie bei "Untersystem Untersys0" außerhalb von Funktionen im Flash? Da in der erzeugten Klasse kein Code steckt sollte sie dann auch (fast)keinen Speicher benötigen, oder? Viele Grüße, Frank
Hat wirklich niemand von euch eine Antwort? Als bisher reiner C'ler habe ich leider wirklich schlechte Karten ohne Hilfe. Gruß, Frank
Hallo, je mit new wird ein neues Object der Klasse anglegt, das object ist so gross wie die member Variablen der Klasse (wenn nicht noch virtuelle Funktionen vorhanden sind). Das object ist dann auf dem Heap. Wenn die Klasse also 10 Methoden und eine Variable vom type int, dann wird mit new nur sizeof(int) belegt. Die frage ist um Welches embeddet system es geht, für ein Atmel würde ich nicht c++ nehmen.
Peter wrote: > für ein Atmel würde > ich nicht c++ nehmen. Soll die Aussage auch nur irgendeinen Sinn haben? AVR32 können sehr gut in C++ programmiert werden.
> AVR32 können sehr...
Ja sollte sie, für mich sind Atmel die 8bit dinger (tiny/mega ..) und
die programmiere ich immer noch gerne in ASM, C ist auch noch ok. Aber
wenn ich "richtiges" C++ schreibe dann will ich auch z.b. die STL
verwenden und der Code wird dann sehr schnell sehr gross.
Ohne dein Problem zu kennen wird es schwierig 'ne Aussage zu treffen, ob die Strukturierung dafür geeignet ist. Sieht mir auf den ersten Blick eher nicht so aus, als wäre das am Ende schön und elegant. Was macht Untersystem::statemachine()? Macht das einen Durchlauf, sollen da mehrere Funktionen parallel laufen, ... ??? SubSubProgram soll wohl ein Array sein (könnte auch überladenes [] sein). Der Code von Peter funktioniert so sicher nicht, new gibt einen Zeiger zurück, also "->" statt ".". Ist alles ziemlich unklar.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.