Forum: Compiler & IDEs Array initialisieren in Keil


von Mein Array ist cool (Gast)


Lesenswert?

Hallo, ich will das gesamte Array mit einem Wert befüllen.
1
#define PARAMETER_BUFF_SIZE 50
2
3
uint16_t parameter_id[PARAMETER_BUFF_SIZE]={0xFFFF};

So sollte es eigentlich klappen?
Bei µVision leider nicht, hier wird nur "parameter_id[0]=0xFFFF".

: Verschoben durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Mein Array ist cool schrieb:
> hier wird nur "parameter_id[0]=0xFFFF"

Ja, und der Rest wird mit 0 befüllt. So will es die ISO-Norm.

von uint32_t clean_code = 0; (Gast)


Lesenswert?

Falls gcc mit ISO C99:
1
#define PARAMETER_BUFF_SIZE 50
2
3
uint16_t parameter_id[PARAMETER_BUFF_SIZE]={[0 ... (PARAMETER_BUFF_SIZE-1)] = 0xFFFF};

von Yalu X. (yalu) (Moderator)


Lesenswert?

uint32_t clean_code = 0; schrieb:
> Falls gcc

Der TE fragte nach Keil.

> mit ISO C99:

Die Initialisierung von Indexbereichen ist nicht ISO, sondern eine
GCC-Erweiterung. Aber vielleicht hat der Keil-Compiler ja ein ähnliches
Feature.

von Daniel A. (daniel-a)


Lesenswert?

Mein Array ist cool schrieb:
> #define PARAMETER_BUFF_SIZE 50
>
> uint16_t parameter_id[PARAMETER_BUFF_SIZE]={0xFFFF};

Ungetesstet, sollte aber mit keil, gcc, und ein paar anderen gehen, dank 
constructor attribut extension dieser Compiler:
1
#include <string.h>
2
3
#define PARAMETER_BUFF_SIZE 50
4
5
static void my_init_func(void) __attribute__((constructor));
6
7
uint16_t parameter_id[PARAMETER_BUFF_SIZE];
8
9
static void my_init_func(void){
10
  memset(parameter_id,0xFF,sizeof(parameter_id));
11
}

von Lutz (Gast)


Lesenswert?

Bei dem Gerödel frage ich mich auch wegen der Lesbarkeit, warum es denn 
nicht die gemeine Schleife tun soll. Und schneller wird es vermutlich 
auch nicht sein.

von Jan K. (jan_k)


Lesenswert?

Yalu X. schrieb:
> uint32_t clean_code = 0; schrieb:
>> Falls gcc
>
> Der TE fragte nach Keil.
>
>> mit ISO C99:
>
> Die Initialisierung von Indexbereichen ist nicht ISO, sondern eine
> GCC-Erweiterung. Aber vielleicht hat der Keil-Compiler ja ein ähnliches
> Feature.

Zumindest Keil armclang v6 kann wohl GCC spezifischen Code übersetzen: 
http://www2.keil.com/mdk5/compiler/6/
Für armcc v5 sind einige extensions implementiert, weiß aber nicht wie 
vollständig das ist.

von W.S. (Gast)


Lesenswert?

Lutz schrieb:
> Bei dem Gerödel frage ich mich auch wegen der Lesbarkeit, warum es denn
> nicht die gemeine Schleife tun soll. Und schneller wird es vermutlich
> auch nicht sein.

Das sehe ich ganz genau so.

All die ach so oberschlauen C-Programmierer, die am liebsten 
Typdeklaration+Variablendefinition+Initialisierung in ein einziges 
Statement quetschen wollen, verlassen sich eisern darauf, daß:

1. das ganze Initialisieren von RAM-Bereichen (nicht nur ausnullen) im 
Startupcode präzise erledigt wird,

2. es NIEMALS einen zweiten Systemanlauf nach dem Power-Up oder ein 
Nachinitialisieren von Teilfunktionen nach Teilausfällen geben darf.

Dabei vergessen diese Leute ganz, daß es in jedem Fall irgend eine 
Schleife geben muß, egal ob im Startup oder in den Init-Routinen der 
eigentlichen Firmware. Kurzum, RAM-Vorbelegungen gibt es nirgendwo 
umsonst.

W.S.

von Vn N. (wefwef_s)


Lesenswert?

W.S. schrieb:
> Das sehe ich ganz genau so.
>
> [blahfasel]
>
> W.S.

Und wo liegt da nun das Problem dabei?

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.