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


von Andreas Auer (Gast)


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

von martin (Gast)


Lesenswert?

versuch es mal mit
cf = new CompactFlash;

so hats bei mir bei windowsprogramme immer funktioniert.

von Andreas Auer (Gast)


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

von Jörg Wunsch (Gast)


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.

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.