mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik speicher allokieren


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eine gute möglichkeit in c speicher während das programm läuft 
zu allokieren?

In meinem Fall besitze ich eine union:
union Example {

  unsigned char  uchar[0]; 
  unsigned short  ushort; 
  unsigned int  uint[0]; 
}; [c/]

uchar und uint variieren in ihrer Größe zwischen uchar[0] und uchar [20] - bei uint entsprechend. 

[c]#include <stdlib.h>
void *malloc(size_t size);

malloc ist nicht möglich, oder... weil malloc ja auf dem Heap und nicht 
im Stack (wo sich die Variablen befinden) arbeitet.

Gibt es trotzdem eine Alternative zu der Möglichkeit, die Arrays mit 
uint[20] und uchar[20] zu definieren?

Bernd

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wieso geht das nicht mit malloc?
dafür ist es doch da!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Schuster wrote:

> Gibt es trotzdem eine Alternative zu der Möglichkeit, die Arrays mit
> uint[20] und uchar[20] zu definieren?

Nein.
Entweder du kennst die Größe zur Compilezeit, dann schreib sie
direkt hin.
Oder du kennst sie nicht, dann musst du mit malloc den benötigten
Speicher reservieren.

Eine Alternative gibt es: Man definiert die Variablen zur Compilezeit
in der maximal zulässigen Größe und verwendet dann einen Teil
ganz einfach nicht. Bei 20 uint würde ich das so machen.

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es muss aber nicht so sein, dass sich die Variablen auf dem Stack 
befinden. Das tun sie nur, wenn Du die Variablen lokal anlegst,also:

void tralala (void)
{
  int i;
  ...
  return;
}

i steht auf dem Stack.

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.