DSP对于char,short,int的字节对齐是强制的,表现为char按字节对齐,int按4字节对齐,short按2字节对齐,则当char*指向0x1时,使用(int*)char*,则实际引用的是0位置,当*(int*)char*=xx时,就会将原先存在0x1中的数据冲掉,造成错误。看下面的例子:
char * size_1;
int * size_4;
size_1 = (char*)0x81000000;
*size_1++ = 0x1;
*size_1++ = 0x2;>>>>>
mem_addr content
0x81000000 01
0x81000001 02
0x81000002 xx
0x81000003 xx
*(int*)size_1 = 0;>>>>>>[char强制为整型后此时实际的指针值变为0x80000000]
mem_addr content
0x81000000 00
0x81000001 00
0x81000002 00
0x81000003 00
size_4 = (int*)0x81000001;
*size_4 = 0xf3f2f1f0;>>>>>>>[ 0x81000001中的1被忽略]
mem_addr content
0x81000000 f0
0x81000001 f1
0x81000002 f2
0x81000003 f3
size_1=(char*)size_4;
i=*size_1;>>>>>>>[整型指针在写存储器的时候忽略字边界的偏移部分,但仍然存在,当
强制为char时,这个全部地址赋值给char,size_1=0x81000001]
i=f1