mikrocontroller.net

Forum: Compiler & IDEs Array initialisieren in Keil


Autor: Mein Array ist cool (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich will das gesamte Array mit einem Wert befüllen.
#define PARAMETER_BUFF_SIZE 50

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 Moderator
Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: uint32_t clean_code = 0; (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls gcc mit ISO C99:
#define PARAMETER_BUFF_SIZE 50

uint16_t parameter_id[PARAMETER_BUFF_SIZE]={[0 ... (PARAMETER_BUFF_SIZE-1)] = 0xFFFF};

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Abrecht (daniel-a)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <string.h>

#define PARAMETER_BUFF_SIZE 50

static void my_init_func(void) __attribute__((constructor));

uint16_t parameter_id[PARAMETER_BUFF_SIZE];

static void my_init_func(void){
  memset(parameter_id,0xFF,sizeof(parameter_id));
}

Autor: Lutz (Gast)
Datum:

Bewertung
2 lesenswert
nicht 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.

Autor: Jan K. (jan_k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: W.S. (Gast)
Datum:

Bewertung
-4 lesenswert
nicht 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.

Autor: vn nn (wefwef_s)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
W.S. schrieb:
> Das sehe ich ganz genau so.
>
> [blahfasel]
>
> W.S.

Und wo liegt da nun das Problem dabei?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.