Hallo zusammen,
ich hab' da ein Problem mit der IAR Embedded Workbench for MSP430
Kickstart Version (Was für ein Name...). Ich hab' ein ByteArray und
möchte dessen Inhalt einer Struktur zuweisen. Nun scheint es aber so,
als hätte der Compiler Probleme mit 16 Bit Integern in der Struktur.
Die Struktur sieht so aus:
1 | struct BootSec
|
2 | {
|
3 | U08 BS_jmpBoot[3]; //3 bytes
|
4 | U08 BS_OEMName[8]; //8 bytes
|
5 | U16 BPB_BytesPerSec; //2 bytes
|
6 | U08 BPB_SecPerClus; //1 byte
|
7 | U08 BPB_RsvdSecCntL; //2 bytes
|
8 | U08 BPB_RsvdSecCntH;
|
9 | U08 BPB_NumFATs; //1 byte
|
10 | U08 BPB_RootEntCntL; //2 bytes
|
11 | U08 BPB_RootEntCntH;
|
12 | U08 BPB_TotSec16L; //2 bytes
|
13 | U08 BPB_TotSec16H;
|
14 | U08 BPB_Media; //1 byte
|
15 | U08 BPB_FATSz16L; //2 bytes
|
16 | U08 BPB_FATSz16H;
|
17 | U16 BPB_SecPerTrk; //2 bytes
|
18 | U16 BPB_NumHeads; //2 bytes
|
19 | U32 BPB_HiddSec; //4 bytes
|
20 | U32 BPB_TotSec32; //4 bytes
|
21 | };
|
Einige Werte hab' ich bereits testweise durch zwei 8 Bit Werte
ersetzt, damit funktioniert's. Sobald ich aber an einen 16 Bit Wert
komme, scheint es so, als würde der Compiler die Offsets verdrehen.
Mein ByteArray hat z.B. folgenden Inhalt (Ist nur der Anfang davon):
eb 3c 90 4d 53 44 4f 53 35 2e 30 00 02 04 04 00
oder als Zeichen
ë<MSDOS5.0......
Das ist korrekt so. Weise ich dieses Array nun der Struktur zu
1 | struct BootSec *BootSector = (struct BootSec *)Buffer;
|
so habe ich in BS_jmpBoot sowie BS_OEMName die richtigen Werte
(0xEB3C90 bzw. "MSDOS5.0"). Aber im ersten 16 Bit Wert
(BPB_BytesPerSec) einen Wert von 1026 bzw. 0x0402 anstatt 512 (0x0200).
Der lässt da also aus irgendeinem mir unerklärlichen Grund das Nullbyte
nach 0x30 aus. Aber WIESO? Ich hab's auch schon mit einem DummyByte
vor BPB_BytesPerSec versucht. Das ist dann auch wirklich 0x00. Der
folgende Int beinhaltet dann aber nicht etwa 0x0404 sonder wieder
0x0402, was ja auch stimmt. Ich versteh's nimmer. Woran kann es
liegen, dass der mir da die Werte irgendwie
verschiebt/verdreht/verändert? Ersetze ich alle 16 Bit Ints durch Char
(8 Bit) so funktioniert's tadellos! Aber das kann's ja wohl nicht
sein...
Langsam beginne ich IAR zu hassen...
Ich hoffe jemand kann mir helfen und bedanke mich schonmal für
Antworten.
Grüsse
Philipp