typedef volatile struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT1;
typedef volatile __packed struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT2;
STR_UCT1 STRUCT1,*p1;
STR_UCT2 STRUCT2,*p2;
INT8U TEST[256];
main()
{
for(i=0;i<256;i++)
TEST[i] = i+1;
/*************************************************/
memcpy((void*)&STRUCT1,TEST,sizeof(STR_UCT1));
memcpy((void*)&STRUCT2,TEST,sizeof(STR_UCT2));
while(1);
}
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x01,STRUCT1.b = 0x0403,STRUCT1.c = 0x08070605;
STRUCT2.a = 0x01,STRUCT2.b = 0x0302,STRUCT2.c = 0x07060504;
/************************************************************************/
p1 = (STR_UCT1*)(TEST);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x01,STRUCT1.b = 0x0403,STRUCT1.c = 0x08070605;
STRUCT2.a = 0x01,STRUCT2.b = 0x0302,STRUCT2.c = 0x07060504;
/**************************************************************************/
p1 = (STR_UCT1*)(TEST+1);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+1);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x02,STRUCT1.b = 0x0004,STRUCT1.c = 0x05080706;
STRUCT2.a = 0x02,STRUCT2.b = 0x0403,STRUCT2.c = 0x08070605;
/******************************************************************/
p1 = (STR_UCT1*)(TEST+2);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+2);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x03,STRUCT1.b = 0x0605,STRUCT1.c = 0x06050807;
STRUCT2.a = 0x03,STRUCT2.b = 0x0504,STRUCT2.c = 0x09080706;
/***********************************************************************/
p1 = (STR_UCT1*)(TEST+3);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+3);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x04,STRUCT1.b = 0x0006,STRUCT1.c = 0x07060508;
STRUCT2.a = 0x04,STRUCT2.b = 0x0605,STRUCT2.c = 0x09080706;
/*****************************************************************************/
p1 = (STR_UCT1*)(TEST+4);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+4);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x05, STRUCT1.b = 0x0807, STRUCT1.c = 0x0C0B0A09;
STRUCT2.a = 0x05, STRUCT2.b = 0x0706, STRUCT2.c = 0x0B0A0908;
/**********************************************************************************/
typedef volatile struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT1;
typedef volatile __packed struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT2;
b和c调换了数据类型
memcpy((void*)&STRUCT1,TEST,sizeof(STR_UCT1));
memcpy((void*)&STRUCT2,TEST,sizeof(STR_UCT2));
运行后:TEXT 0X200034DC STRUCT1 0X200034D0 STRUCT2 0X20002AE1
STRUCT1.a = 0x01, STRUCT1.b = 0x08070605, STRUCT1.c = 0x0A09;
STRUCT2.a = 0x01, STRUCT2.b = 0x05040302, STRUCT2.c = 0x0706;
/*******************************************************************/
p1 = (STR_UCT1*)(TEST);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEXT 0X200034E4 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x01, STRUCT1.b = 0x08070605, STRUCT1.c = 0x0A09;
STRUCT2.a = 0x01, STRUCT2.b = 0x05040302, STRUCT2.c = 0x0706;
/********************************************************************/
p1 = (STR_UCT1*)(TEST+1);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+1);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEXT 0X200034E4 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x02, STRUCT1.b = 0x05080706, STRUCT1.c = 0x000A;
STRUCT2.a = 0x02, STRUCT2.b = 0x06050403, STRUCT2.c = 0x0807;
/***********************************************************************/
p1 = (STR_UCT1*)(TEST+2);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+2);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEXT 0X200034E4 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x03, STRUCT1.b = 0x06050807, STRUCT1.c = 0x0B0C;
STRUCT2.a = 0x03, STRUCT2.b = 0x07060504, STRUCT2.c = 0x0908;
/************************************************************************/
p1 = (STR_UCT1*)(TEST+3);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+3);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEXT 0X200034E4 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x04, STRUCT1.b = 0x07060508, STRUCT1.c = 0x000C;
STRUCT2.a = 0x04, STRUCT2.b = 0x08070605, STRUCT2.c = 0x0A09;
/***********************************************************************/
p1 = (STR_UCT1*)(TEST+4);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+4);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEXT 0X200034E4 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x05, STRUCT1.b = 0x0C0B0A09, STRUCT1.c = 0x0E0D;
STRUCT2.a = 0x04, STRUCT2.b = 0x09080706, STRUCT2.c = 0x0B0A;
/*********************************************************************/
p1 = (STR_UCT1*)(TEST);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E3 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x01, STRUCT1.b = 0x05040302, STRUCT1.c = 0x0706;
STRUCT2.a = 0x01, STRUCT2.b = 0x08070605, STRUCT2.c = 0x0A09;
/*******************************************************************/
p1 = (STR_UCT1*)(TEST+1);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+1);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E3 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x02, STRUCT1.b = 0x06050403, STRUCT1.c = 0x0807;
STRUCT2.a = 0x02, STRUCT2.b = 0x05080706, STRUCT2.c = 0x000A;
/**********************************************************************/
p1 = (STR_UCT1*)(TEST+2);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+2);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E3 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x03, STRUCT1.b = 0x07060504, STRUCT1.c = 0x0908;
STRUCT2.a = 0x03, STRUCT2.b = 0x06050807, STRUCT2.c = 0x0C0B;
/*************************************************************************/
p1 = (STR_UCT1*)(TEST+3);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+3);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E3 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x04, STRUCT1.b = 0x08070605, STRUCT1.c = 0x0A09;
STRUCT2.a = 0x04, STRUCT2.b = 0x07060508, STRUCT2.c = 0x000C;
/**************************************************************************/
p1 = (STR_UCT1*)(TEST+4);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+4);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E3 STRUCT1 0X200034D8 STRUCT2 0X20002AE9
STRUCT1.a = 0x05, STRUCT1.b = 0x09080706, STRUCT1.c = 0x0A09;
STRUCT2.a = 0x05, STRUCT2.b = 0x0C0B0A09, STRUCT2.c = 0x0E0D;
/*************************************************************************/
typedef volatile struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT1;
typedef volatile __packed struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT2;
STR_UCT1 STRUCT1,*p1;
__align(4) STR_UCT2 STRUCT2,*p2;
memcpy((void*)&STRUCT1,TEST,sizeof(STR_UCT1));
memcpy((void*)&STRUCT2,TEST,sizeof(STR_UCT2));
运行后:TEXT 0X200034E0 STRUCT1 0X200034D4 STRUCT2 0X20002AE4
STRUCT1.a = 0x01, STRUCT1.b = 0x08070605, STRUCT1.c = 0x0A09;
STRUCT2.a = 0x01, STRUCT2.b = 0x05040302, STRUCT2.c = 0x0706;
/*************************************************************************/
p1 = (STR_UCT1*)(TEST);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E8 STRUCT1 0X200034DC STRUCT2 0X20002AEC
STRUCT1.a = 0x01, STRUCT1.b = 0x05040302, STRUCT1.c = 0x0706;
STRUCT2.a = 0x01, STRUCT2.b = 0x08070605, STRUCT2.c = 0x0A09;
/*********************************************************************/
p1 = (STR_UCT1*)(TEST+1);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+1);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E8 STRUCT1 0X200034DC STRUCT2 0X20002AEC
STRUCT1.a = 0x02, STRUCT1.b = 0x06050403, STRUCT1.c = 0x0807;
STRUCT2.a = 0x02, STRUCT2.b = 0x05080706, STRUCT2.c = 0x000A;
/************************************************************************/
p1 = (STR_UCT1*)(TEST+2);
STRUCT2.a = p1->a;
STRUCT2.b = p1->b;
STRUCT2.c = p1->c;
p2 = (STR_UCT2*)(TEST+2);
STRUCT1.a = p2->a;
STRUCT1.b = p2->b;
STRUCT1.c = p2->c;
运行后:TEXT 0X200034E8 STRUCT1 0X200034DC STRUCT2 0X20002AEC
STRUCT1.a = 0x03, STRUCT1.b = 0x07060504, STRUCT1.c = 0x0908;
STRUCT2.a = 0x03, STRUCT2.b = 0x06050807, STRUCT2.c = 0x0C0B;
/*************************************************************************/