www.mikrocontroller.net

Forum: Compiler & IDEs [AVRG++] malloc und Klassen


Autor: Andreas Auer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

Ich bin gerade dabei, dass ich eine Ansteuerung für eine Compact Flash
schreibe und dazu ein FAT32 Filesystem. Ich hab mich entschieden alles
mit Klassen aufzubauen (aufgrund der Kapselung und so weiter).
Das Ganze lässt sich auch ohne weiteres compilieren. In den Klassen ist
jeweils ein Konstruktor drinnen.
Mache ich eine Instanz von der Klasse, dann wird der Konstruktor auch
aufgerufen.
 z.B.
  CompactFlash cf;

Mache ich eine Instanz jedoch als Pointer, wird der Konstruktor nicht
aufgerufen. Kennt jemand dieses Problem??
 z.B.
  CompactFlash *cf;
  cf = (CompactFlash *)malloc(sizeof(CompactFlash));

mfg
Andreas

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch es mal mit
cf = new CompactFlash;

so hats bei mir bei windowsprogramme immer funktioniert.

Autor: Andreas Auer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem dabei ist nur, dass es kein "new" (auch ein "delete")
für den avr-g++ gibt. Man kann Speicher also nur mit malloc anfordern.
Und ich will unbedingt die Variable mit "malloc" initialisieren, da
der Speicher, der angefordert wird, im externen RAM liegt. Sonst werden
mir meine internen 1kByte SRAM zu wenig.

Gibts vielleicht so ne Art Preprozessor Anweisung, mit der ich die
Variable ohne malloc initialisieren kann und die Variable trotzdem im
Heap - also im externen RAM - abgelegt wird?????

Andreas

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wir suchen eigentlich schon lange jemanden, der sich um die C++
Geschichten in der avr-libc kümmern kann (bzw. den Grundstock für eine
avr-libc++ damit bildet).

Ein Wrapper um malloc()/free() für new/delete kann so schwer nicht
sein, es bedarf einfach nur mal eines Entwicklers, der sich der Sache
annimmt.  Ich würde diese Variante an Deiner Stelle jedenfalls
irgendwelchen Casting-Hacks allemal vorziehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.