Quantcast
Channel: C6000™多核 - 最近的话题
Viewing all articles
Browse latest Browse all 5545

C6678 访问非对齐地址的问题

$
0
0

           最近在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 类型的全局变量,那么,我在给一个全局变量赋值的时候,如果存在强制类型转换是非常危险的,因为会写入相邻几个地址?


Viewing all articles
Browse latest Browse all 5545

Trending Articles