I am having trouble aligning memory for DMA transfer on the Cell processor. I need the last 4 bits of an address to be 0.
I have 4 arrays of unsigned int
where each element must be aligned in memory so that its (hex) adress ends with a zero.
E.g.
int main()
{
size_t i;
static unsigned int a[2] __attribute__ ((aligned (16)));
static unsigned int b[2] __attribute__ ((aligned (16)));
static unsigned int c[2] __attribute__ ((aligned (16)));
static unsigned int d[2] __attribute__ ((aligned (16)));
for (i = 0; i < 2; ++i) {
printf("a[%u] = %p
", &a[i]);
printf("b[%u] = %p
", &b[i]);
printf("c[%u] = %p
", &c[i]);
printf("d[%u] = %p
", &d[i]);
}
return 0;
}
Output:
a[0] = 0x10010b60
b[0] = 0x10010b50
c[0] = 0x10010b40
d[0] = 0x10010b30
a[1] = 0x10010b64
b[1] = 0x10010b54
c[1] = 0x10010b44
d[1] = 0x10010b34
The problem here is that the 2nd element of each array doesn't seem to be 16-bit aligned (their address' end with a 4).
I need the addresses to look like this:
a[0] = 0xXXXXXXX0
b[0] = 0xXXXXXXX0
c[0] = 0xXXXXXXX0
d[0] = 0xXXXXXXX0
a[1] = 0xXXXXXXX0
b[1] = 0xXXXXXXX0
c[1] = 0xXXXXXXX0
d[1] = 0xXXXXXXX0
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…