Werden statische lokale Arrays vom XC32 compiler automatisch beim Programmstart auf 0 initialisiert

OP #8094488
Lesenswert?

Hallo, wird bei dem XC32 Compiler von Microchip das u.g. lokale statische Array "static int Puffer[MaxNummer][MaxWerte];" bei Prozessorstart automatisch auf 0 initialisiert ?

1
int Ringpuffer (int Messwert,int Nummer)
2
    {
3
    #define MaxNummer   12  // Maximale Anzahl an Filtern 
4
    #define MaxWerte    5  // Maximale Anzahl an Pufferwerten pro Filter
5
    static int Puffer[MaxNummer][MaxWerte];
6
    static int Zeiger[MaxNummer]; // Nummer 0... des aktuellen Messwertes der geschrieben wird
7
    int Ergebnis,Schleife;
8

9
// Der Rest code kommt später
#8094491
Lesenswert?

Normalerweise schon (Liegen im BSS). Aber schreib einfach

1
static int Puffer[MaxNummer][MaxWerte] = {0};
2
static int Zeiger[MaxNummer] = {0};

Wenn dir die Initialisierung wichtig ist.

Wenn der Compiler das eh gemacht hätte, ist das kein zusätzlicher Code, und es dient gleichzeitig als Kommentar.

: Bearbeitet durch User
Moderator Persönliche Seite #8094496
Lesenswert?

Dirk F. schrieb:

Hallo, wird bei dem XC32 Compiler von Microchip das u.g. lokale statische Array "static int Puffer[MaxNummer][MaxWerte];" bei Prozessorstart automatisch auf 0 initialisiert ?

Wenn er mit dem C-Standard konform ist: ja.

Εrnst B. schrieb:

Wenn der Compiler das eh gemacht hätte, ist das kein zusätzlicher Code

Kann man nicht garantieren. Der GCC hatte dafür vor Jahren explizit zusätzlichen Code produziert.

#8094528
Lesenswert?

bei den alten PIC-Compilern (bevor sie non Microchip aufgekauft wurden) musste man den Startup-Code entsprechend ... konfigurieren/anpassen. Oft zählt da halt Zeit/platz

Normalerweise trennt ein Compiler zwischen Bereichen, die gelöscht werden und Bereiche, die initialisiert werden.

Über den gelöschten Bereich wird einfach jedes Byte mit 0 beschrieben, der initialisierte hat ein pendant im Flash, das drüberkopiert wird.

Such mal unter Startup im Handbuch. Alternative (nicht ganz so sicher): Initialisiere mit einem Feld ungleich 0 und schaue, ob der Code (genauer: Der ROM-Bedarf) mehr wird. Im anderen Schritt lasse die Initialisierung ganz weg und schaue im Linker-File, ob es eine andere "section" gibt, in der die Variable jetzt liegt

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren