Forum: Mikrocontroller und Digitale Elektronik Speicherplatz global reservieren?!


von Jan H. (janiiix3)


Lesenswert?

Hallo.
Wollte gerne Speicherplatz für eine uint8_t Variable global reservieren.
Sobald ist dies tue, sagt der Compiler folgendes
1
Fehler    initializer element is not constant
1
uint8_t *buff = (uint8_t *) calloc(11,sizeof(int));
So versuche ich den Speicherplatz zu reservieren. Ist das falsch? In der 
main() klappt es jedoch.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jan H. schrieb:
> uint8_t *buff = (uint8_t *) calloc(11,sizeof(int));
> So versuche ich den Speicherplatz zu reservieren. Ist das falsch? In der
> main() klappt es jedoch.

Ds geht statisch so nicht ...

Du würdest dann einfach

uint8_t buff[11*sizeof(int)];

schreiben, dann klappt es.

von Rolf M. (rmagnus)


Lesenswert?

Jan H. schrieb:
> Hallo.
> Wollte gerne Speicherplatz für eine uint8_t Variable global reservieren.
> Sobald ist dies tue, sagt der Compiler folgendes
> Fehler    initializer element is not constant
> uint8_t *buff = (uint8_t *) calloc(11,sizeof(int));

Die Meldung sagt eigentlich recht klar, was das Problem ist. In C können 
Funktionen nicht vor main() ausgeführt werden. Deshalb können globale 
Variablen ausschließlich mit Konstanten initialisiert werden.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ah und normalerweise landen globale Arrays (ohne vorinitialisierte 
Werte) in der .bss-Section.

Der Startup-Code sollte alles, was in .bss ist, mit 0 initialisieren.

Vergewissere dich aber lieber nochmal ...

von Sebastian S. (amateur)


Lesenswert?

@ Jan
Abgesehen davon, dass an der angegebenen Stelle keine Funktionen 
ausgeführt werden können: Was soll das Ganze überhaupt?
Du redest von Global, benutzt eine Funktion um immer den gleichen 
Speicher (Größe) zu reservieren.
Oder willst Du unbedingt den Code aufblähen oder das Programm 
komplizierter gestalten?

Beitrag #5132409 wurde von einem Moderator gelöscht.
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.