原因是XGATE的一个字必须从偶地址开始,而主处理器一个字则没有这种要求。比如定义一个结构体:
struct
{
unsigned int a;
unsigned char b;
unsigned int c;
}box;
假设地址是从0开始的,那么在主处理器中,box.a的地址是0,box.b的地址是2,box.c的地址是3,但到了XGATE中,box.a的地址是0,box.b的地址是2,到box.c的时候,因为xgate的字必须要从偶地址开始,地址就变成4了。因此,在主处理器中,box占用地址0-5的5个字节,而在XGATE中,box占用地址0-6的6个字节。
我用了个取巧的办法,假如a,b,c都是我们需要的数据,为了保证对齐,我在b和c之间插入了一个char 型,结构体就变成:
struct
{
unsigned int a;
unsigned char b;
unsigned char reserve;
unsigned int c;
}box;
这样就保证了2边的地址大小一致,而又不需要修改原有代码。 |