最近在CCS 5.2上仿真C6678跑一个程序,来测试CPU 访问非对齐访问内存。
代码如下:
void main(void)
{
unsigned int *ptr;
//__packed unsigned int *ptr;
ptr = (unsigned int *)(0x800002);
*ptr = 0x12345678;
}
ptr无论指向的地址是0x800000,0x800001,0x800002,0x800003,通过查看内存,发现0x12345678都是写在0x800000,0x800001,0x800002,0x800003这几个地址上,这应该是CPU对齐访问造成的。
我有几个问题想问问:
1:查看编译生成的汇编代码,汇编代码并没有对地址进行处理,程序该访问什么地址,汇编就是写入的什么地址,那么对齐访问应该是CPU自己实现的?
2:CPU具体是怎么对齐访问的呢,能否简单的从硬件的角度说明一下
3:CPU默认是对齐访问,那么我想想之前写的代码就会有很大的隐患。比如代码中可能有很多char 类型的全局变量,那么,我在给一个全局变量赋值的时候,如果存在强制类型转换是非常危险的,因为会写入相邻几个地址?