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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.