经过细测,Cortex-M3的double类型必须4字节对齐访问,其他诸如float,int,short 可以非对齐访问。否则将会产生硬件异常!即访问double类型地址必须能被4整除,测试代码如下:
/* 测试Cortex-M3类型对齐访问
* i,j,k,l控制对齐长度,对齐
* 长度不符合是将产生HardFault
* 异常
*/
double *p;
float *q;
int *t;
short *r;
char buf[32] __attribute__((at(0X20002000)));
11:
void)
13: {
int i, j, k, l;
15: i = 0;
16: j = 0;
17: k = 0;
18: l = 0;
while(1)
20: {
double *)(0x20000000 + i);
22: *p = 890.0;
//double 地址增量,只能是4的整数倍
24:
float *)(0x20001000 + j);
26: *q = 890.0;
//float 地址增量
28:
int *)(0x20002000 + k);
30: *t = 890;
//int 地址增量
32:
short *)(0x20003000 + l);
34: *r = 890;
//short 地址增量
36:
37: }
return 0;
39:
40: }
41:
42:
43:
44: