2 Dimensonales Array Speicher Reservieren

OP #6888479
Lesenswert?
• ▲
▼
Hi,

ich möchte bei einem STM32 Projekt in C folgendes Array definieren:

uint8_t display[64][32];

Und dann den einzelnen Speicherzellen quasi Werte zur Laufzeit zuweisen:

display[63][1]=0xFF

Das schlägt mit Invalid Initalizer fehl, klar ich muss den Speicher für 
64*32 Bytes erst reservieren nehme ich an?

Sorry für die dumme Frage, aber ich hab gerade eine Denkblockade was 
malloc usw angeht. Hab das lange nicht mehr benötigt.

Was muss ich genau tun, damit mein vorhaben gelingt?
OP #6888504
Lesenswert?
• ▲
▼
Compilermeldung ist folgende:

arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m4 -std=gnu11 -g3 
-DUSE_HAL_DRIVER -DDEBUG -DSTM32L496xx -c -I../Core/Inc 
-I../Drivers/STM32L4xx_HAL_Driver/Inc 
-I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy 
-I../Drivers/CMSIS/Device/ST/STM32L4xx/Include 
-I../Drivers/CMSIS/Include -I../FATFS/Target -I../FATFS/App 
-I../Middlewares/Third_Party/FatFs/src -O0 -ffunction-sections 
-fdata-sections -Wall -fstack-usage -MMD -MP -MF"Core/Src/main.d" 
-MT"Core/Src/main.o" --specs=nano.specs -mfpu=fpv4-sp-d16 
-mfloat-abi=hard -mthumb -o "Core/Src/main.o"
../Core/Src/main.c:81:1: warning: data definition has no type or storage 
class
   81 | display[63][1]=0xFF;
      | ^~~~~~~
../Core/Src/main.c:81:1: warning: type defaults to 'int' in declaration 
of 'display' [-Wimplicit-int]
../Core/Src/main.c:81:1: error: conflicting types for 'display'
../Core/Src/main.c:79:9: note: previous definition of 'display' was here
   79 | uint8_t display[64][32]={{0xFF}}; //Neues Array für 1 
Displayfeld Bit 0=Rot,1=Gelb,2=Blau
      |         ^~~~~~~
../Core/Src/main.c:81:16: error: invalid initializer
   81 | display[63][1]=0xFF;
      |                ^~~~
make: *** [Core/Src/subdir.mk:34: Core/Src/main.o] Error 1
"make -j4 all" terminated with exit code 2. Build might be incomplete.
Beitrag #6888523 wurde von einem Moderator gelöscht.
Gast #6888640
Lesenswert?
• ▲
▼
direkt bei der Definition einen Wert zuweisen.
1
uint8_t display[64][32] = { [0][0]=0x00, [1][1] = 0x01, [63][1] = 0xFF };

Der Rest wird automatisch auf 0 gesetzt (was bei global sowieso der Fall 
wäre).

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.