[an error occurred while processing this directive] [an error occurred while processing this directive]
Подскажите, плиз, по указателям в С... (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AndyBig 10 декабря 2001 г. 13:03

Написал примерно вот такой код:

char sbuf[512];

struct FATinfo
{
char BS_jmpBoot[3];
char BS_OEMName[8];
unsigned int BPB_BytsPerSec;
unsigned char BPB_SecPerClus;
unsigned int BPB_RsvdSecCnt;
unsigned char BPB_NumFATs;
unsigned int BPB_RootEntCnt;
unsigned int BPB_TotSec16;
unsigned char BPB_Media;
unsigned int BPB_FATSz16;
unsigned int BPB_SecPerTrk;
unsigned int BPB_NumHeads;
unsigned long BPB_HiddSec;
unsigned long BPB_TotSec32;
unsigned long BPB_FATSz32;
unsigned int BPB_ExtFlags;
unsigned int BPB_FSVer;
unsigned long BPB_RootClus;
unsigned int BPB_FSInfo;
unsigned int BPB_BkBootSec;
unsigned char BS_DrvNum;
unsigned char BS_Reserved;
unsigned char BS_BootSig;
char BS_VolID[4];
char BS_VolLab[11];
char BS_FilSysType[8];
};

void main(void)
{
struct FATinfo *FATi; // указатель на структуру

/* здесь идет заполнение массива sbuf[] */
...

/* теперь пытаюсь достать из этого массива нужные значения */
FATi = (struct FATinfo *) sbuf; // указатель структуры на массив...
lcd_print(FATi->BS_jmpBoot);
lcd_print(FATi->BS_OEMName);
lcd_print(FATi->BPB_BytsPerSec);
/* оставшийся код... */
...
}

Так вот, первые две части структуры FATinfo выводятся нормально, а третья (BPB_BytsPerSec) получается сдвинутой на один байт от начала массива, то есть при ее чтении получается, что она начинается не с 12-го байта, а с 13-го. В чем может быть дело?
Микроконтроллер - 16-битный, Fujitsu MB90F553. Подозреваю, что это как-то связано с 16-битным выравниванием при линковании (allignment), но в чем именно дело и как с этим бороться не пойму. Поможьте, пожалуйста :).

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru