Feldinitialisierung in einer Funtkion
-
Hallo!
In main muss ich eine LCD Zeichentabelle laden, welche aus einem großen Feld besteht:
Da die Initialisierung vom Feld extrem lang ist, möchte ich das in eine Funktion lade_zeichentabelle auslagern.
Dort wird einfach die Adresse vom Feldanfang zurückgegeben.Wird das Feld eh nicht aus dem Speicher gelöscht, nach dem die Funktion verlassen wird? Muss das static überhaupt sein?
Jedes Mal wenn ich die Funktion aufrufe, wird ein neuer Speicherbereich mit der Zeichentabelle erstellt, oder wird da eh immer die gleiche verwendet?
Wär ja blöd wenn von so einem riesigem Feld zig Kopien im Speicher liegen, es reicht ja einmal!!!int main() { ... lcd_init(lade_zeichentabelle()); ... } unsigned char* lade_zeichentabelle() { static unsigned char zeichentabelle[776]={23,45,12,usw...}; return zeichentabelle; }
Lg
-
pack das doch einfach als globale variable in eine header datei und includiere die in deinem project, du kannst ja dann die globale variable als parameter an die functionen übergeben, sowas
unsigned char* lade_zeichentabelle() { static unsigned char zeichentabelle[776]={23,45,12,usw...}; return zeichentabelle; }
find ich nicht so schön, egal wo das abhängt...
lg lolo
-
6.2.4.3 schrieb:
An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration. Its lifetime is the entire
execution of the program and its stored value is initialized only once, prior to program
startup.
-
@9899_1999 : danke, das klärt meine frage. Wo findet man solche Informationen?
noobLolo schrieb:
pack das doch einfach als globale variable in eine header datei und includiere die in deinem project, du kannst ja dann die globale variable als parameter an die functionen übergeben, sowas
unsigned char* lade_zeichentabelle() { static unsigned char zeichentabelle[776]={23,45,12,usw...}; return zeichentabelle; }
find ich nicht so schön, egal wo das abhängt...
lg lolo
sagen wir mal die Header Datei wird mehrfach inkludiert in mehreren C Dateien.
Wird dann eine dort definierte Variable nur ein einziges Mal im Speicher angelegt oder mehrfach?
-
#ifndef INCLUDE_BLOCK #define INCLUDE_BLOCK int myVarIsIncludedOnlyOnce = 1010; #endif
so kannst du es verhindern das dateien öfter als einmal in das projekt includiert werden
-
speicherfrage schrieb:
@9899_1999 : danke, das klärt meine frage. Wo findet man solche Informationen?
ich würds spontan mal hier probieren http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf
-
noobLolo schrieb:
#ifndef INCLUDE_BLOCK #define INCLUDE_BLOCK int myVarIsIncludedOnlyOnce = 1010; #endif
so kannst du es verhindern das dateien öfter als einmal in das projekt includiert werden
wunderbar, dann ist das natürlich eine saubere variante um mein problem anzugehen.
danke nochmal!
-
speicherfrage schrieb:
wunderbar, dann ist das natürlich eine saubere variante um mein problem anzugehen.
^^nee, sowas in header-files zu haben ist doch doof. mach die zeichentabelle einfach in eine eigene C-datei:
// chartable.c const unsigned char chartable[] = { ..., ..., ... // viele viele bytes };
die wird zum projekt hinzugefügt und überall wo du sie brauchst machste einfach:
extern const unsigned char chartable[]; // bekannt machen ... ... lcd_init(chartable); // ... und benutzen ...
-
ok danke, das mit der c datei schaut auch gut aus!