DSP

DSP中字节/字对齐的问题

2019-07-13 09:38发布

DSP对于char,short,int的字节对齐是强制的,表现为char按字节对齐,int4字节对齐,short2字节对齐,则当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