Array initialisieren in Keil

#5142221
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
}
#5143694
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.
Gast #5147641
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.

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