本帖最后由 cbx_xx 于 2017-8-28 09:24 编辑
我一个工程是读取sd卡里的BPB参数. 我定义了一个u8 BUFFER[512];读取的数据就放进这个BUFFER里.
#pragma pack(1)
typedef struct
{
u8 BS_jmpBoot[3];
u8 BS_OEMName[8];
u16 BPB_BytesPerSec;
u8 BPB_SecPerClus;
u16 BPB_RsvdSecCnt;
u8 BPB_NumFATs;
u16 BPB_RootEntCnt;
u16 BPB_TotSec16;
u8 BPB_Media;
u16 BPB_FATSz16;
u16 BPB_SecPerTrk;
u16 BPB_NumHeads;
u32 BPB_HiddSec;
u32 BPB_TotSec32;
u8 BS_DrvNum;
u8 BS_Reservedl;
u8 BS_BootSig;
u32 BS_VolID;
u8 BS_VolLab[11];
u8 BS_FilSysType[8];
u8 ExecutableCode[448];
u8 ExecutableMarker[2];
} FAT_BPB;
#pragma pack()
在一个函数里操作
FAT_BPB* BPB = (FAT_BPB*)BUFFER;
ReadBlock(0,BUFFER);
在MDK4.1没事,读取BUFFER的完全符合BPB参数,查看BUFFER内存数据如下:0xeb,0x3c,0x90,0x4d,0x53,0x44,0x53,0x35,0x2e,0x30.....
但是在MDK4.7和MDK5.23里却是这样. 假设BUFFER的地址是0x2000053B,则开头数据如下0x4d,0x53,0x44,0x53,0x35,0x2e,0x30..... 我通过内存往后看,发觉0x20000538开始就是0xeb,0x3c,0x90.
也就是说,读取的数据放到BUFFER里,开始的地址变了. 我SD卡是通过DMA放的.
为什么MDK4.1没事呢
|