Forum: Compiler & IDEs 2 Dimensonales Array Speicher Reservieren


von Johannes M. (jojo20)


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?

von Walter T. (nicolas)


Lesenswert?

Johannes M. schrieb:
> as schlägt mit Invalid Initalizer fehl,

Dann fehlt wohl stdint.h

von Oliver S. (oliverso)


Lesenswert?

Johannes M. schrieb:
> Was muss ich genau tun, damit mein vorhaben gelingt?

Den Fehler in Zeile 42 beheben, das fehlende Semikolon einfügen, oder 
den Originalcode mit der Originalfehlermeldung zeigen.

Oliver

von Johannes M. (jojo20)


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 vom Autor gelöscht.
von Oliver S. (oliverso)


Lesenswert?

Ok, Fehler in Zeile 81.

Du hast sehr wahrscheinlich die Zeile mit dem Fehler außerhalb einer 
Funktion stehen.

Daher:
Zeig den Code.

Oliver

von Johannes M. (jojo20)


Lesenswert?

Asche auf mein Haupt, ich bin ein depp.

Die Variable ist global definiert und ich hab die Zuweisung direkt 
danach außerhalb einer Funktion versucht. Ist damit erledigt.

von so geht's (Gast)


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).

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.