Hallo Foristen,
ich habe folgendes C-Code Fragment in einen Programm für einen 16-Bit
PIC24-µC.
typedef unsigned char BYTE;
#define REVISION {0x32,0x45,0x43,0x14,0x0A,0x42,0x02,0x00}
BYTE buff[8] = REVISION;
dieser C-Code funktioniert so wie es ist im XC16 v1.24 Compiler.
Dieses Fragment sollte später auch auf einen PIC32 mit XC32 Compiler
v1.4 eingesetzt werden.
Im XC32-Compiler funktioniert dieses Fragment so nicht. Die Werte aus
REVISION werden den Array nicht übergeben.
Auch das Deklarieren und initalisieren eines Byte-Array so wie hier nach
C99-Standard
BYTE testarray[] = {0x00, 0x01, 0x02, 0x03};
funktioniert nicht. Die Werte werden so in das Array nicht übernommen,
es sind stets Zufallswerte eingetragen auch nicht bei
BYTE testarray[] = {0, 0, 0, 0};
Aber das Initalisieren mit Zeichen funktioniert so wie hier.
BYTE testarray[] = {'1', '2', '3', '4'};
Das ist aber nicht das gleiche!
Ich habe das nun so gelöst und das funktioniert auch so.
BYTE buff[8];
buff[0]=0x32;
buff[1]=0x45;
buff[2]......
.............
Was mache ich an oberer Stelle falsch?
Liegt es am Compiler, dass das Array wie oben nicht so deklariert und
initalisiert werden kann?
Mit freundlichen Grüßen.
Hi,
Für mich klingt das so, als wenn linker Script / Startup file, das RAM
nicht komplett initialisiert. Hast du das selbst geschrieben?
Mit freundlichen Grüßen
Torsten
Hallo Torsten,
nein,oberes Fragment ist aus einen fertigen Programm das ein Mitarbeiter
geschrieben hatte. Die XC32-Compiler ist von Microchip.
Mit freudlichen Grüßen
funktioniert hier 1) (mit und ohne -std=c99 im Makefile).
Auch das Assembler-Listing passt dazu.
Target war ein PIC32MZ2048EFM144 (sollte eigentlich keine Rolle
spielen).
Compiler XC32 v1.4
Aus dem generierten .map