C++ auf AVR und Variablenoptimierung

Gast #3188458
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
#3188465
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.