Forum: Compiler & IDEs C++ auf AVR und Variablenoptimierung


von peter (Gast)


Lesenswert?

Hallo,
man kann ja C++ ohne NEW und delete Operator auf AVRs Programmieren. 
Jetzt würde mich 2 Sachen interesieren:
1.
Kann ich Obejkte in Unterfunktion temporär wie Variablen auf dem Stack 
anlegen so das die nach dem Verlassen der Funktion wieder gelöscht 
werden?

Also z.B.
meineFunktion(){
meinObjekt a;
meinObjekt b;
}
Hier sollte der Speicher dann wieder frei sein... .

2.
Wie sage ich dem AVR das manche Funktionen aus Interupts aufgerufen 
werden damit er die Variablen nicht wegoptimiert. Also z.B.

Obj::set_timeout()
{
   timeout = 1;
}

Obj::machwas
{
while(1&&(!(timeout));
}

Funktion machwas wird von extern aufgerufen und steckt in der while 
fest. Jetzt schlägt irgendwann der Timer Int zu und setzt ein Timeout. 
Wie schaffe ich es, dass sowas sicher Funktioniert? Reicht es die 
Variable als volatile zu definieren?

Ich hoffe ihr habt ein paar ANtworten ;-).

Gruß
Peter

von Karl H. (kbuchegg)


Lesenswert?

peter schrieb:

> 1.
> Kann ich Obejkte in Unterfunktion temporär wie Variablen auf dem Stack
> anlegen so das die nach dem Verlassen der Funktion wieder gelöscht
> werden?

Selbstverständlich.
Nur weil die Sprache C++ heißt, funktionieren ja lokale Variablen nicht 
anders als in C


> Funktion machwas wird von extern aufgerufen und steckt in der while
> fest. Jetzt schlägt irgendwann der Timer Int zu und setzt ein Timeout.
> Wie schaffe ich es, dass sowas sicher Funktioniert? Reicht es die
> Variable als volatile zu definieren?

Ja. Es gibt keinen Grund warum das grundsätzlich anders funktionieren 
sollte.
An dieser Stelle ist dein C++ ja nichts anderes als eine etwas andere 
Organisationsform deines Codes. Ob du getrennte Strukturen und 
Funktionen, die auf diesen Strukturen operieren hast, oder ob du beides 
zusammenfasst und eine 'Klasse' nennst, ändert ja am grundsätzlichen 
Prinzip nichts.

von troll (Gast)


Lesenswert?


von Coder (Gast)


Lesenswert?

Das AVR GCC Tutorial lesen. Was für C gut ist kann für C++ nicht 
schlecht sein.

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.