Speicherausrichtung von Arrays
Ich habe Probleme beim Anpassen des Speichers für die DMA-Übertragung auf dem Zellenprozessor. Ich brauche die letzten 4 Bits einer Adresse, um 0 zu sein.
Ich habe 4 Arrays vonunsigned int
wo jedes Element sein mussausgerichtet im Speicher, so dass seine (hex) Adresse mit einer Null endet.
Z.B.
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\n", &a[i]);
printf("b[%u] = %p\n", &b[i]);
printf("c[%u] = %p\n", &c[i]);
printf("d[%u] = %p\n", &d[i]);
}
return 0;
}
Ausgabe:
a[0] = 0x10010b60
b[0] = 0x10010b50
c[0] = 0x10010b40
d[0] = 0x10010b30
a[1] = 0x10010b64
b[1] = 0x10010b54
c[1] = 0x10010b44
d[1] = 0x10010b34
Das Problem hierbei ist, dass das 2. Element jedes Arrays nicht 16-Bit-ausgerichtet zu sein scheint (ihre Adresse endet mit einer 4).
Ich brauche die Adressen, um so auszusehen:
a[0] = 0xXXXXXXX0
b[0] = 0xXXXXXXX0
c[0] = 0xXXXXXXX0
d[0] = 0xXXXXXXX0
a[1] = 0xXXXXXXX0
b[1] = 0xXXXXXXX0
c[1] = 0xXXXXXXX0
d[1] = 0xXXXXXXX0