하드웨어 인터페이스를 사용하여 DMA 버퍼를 설정해야하는 데이터를 보내고 있습니다. 버퍼는 64 비트 경계에 정렬해야합니다.버퍼 메모리가 정렬되었는지 어떻게 확인합니까?
DMA 엔진은 버퍼가 적어도 32 비트 경계 (4 바이트)에 정렬 될 것으로 예상합니다. 최적의 성능을 위해 버퍼는 64 비트 경계 (8 바이트)에 정렬되어야합니다. 전송 크기는 4 바이트의 배수 여야합니다. 나는이 같은 버퍼를 만들 posix_memalign
를 사용
...
posix_memalign ((void**)&pPattern, 0x1000, DmaBufferSizeinInt32s * sizeof(int)))
pPattern
는 int 형에 대한 포인터이며, 깊은 DmaBufferSizeinInt32s
내 버퍼의 시작이다.
내 버퍼가 64 비트로 정렬되어 있습니까?
4KByte 경계 정렬이 필요한지 확실하지 않습니다 ... 제가해야합니까? – Krakkos
기본적으로 10 x 32 비트 단어 인 데이터 객체를 작성하고 있습니다. 매번 10 x 32 비트 단어의 정수를 보내려고합니다. 저는 현재 각 DMA 전송에서 400 x 320 비트 데이터 객체를 DMA하고 있습니다. 내 버퍼 크기 (400 x 10 x 32 비트)가 정렬과 관련이 있는지 확실하지 않습니다. 버퍼의 크기를 조정해야합니까? – Krakkos
나는 그 질문에 대답 할 수 없다. 나는 당신의 플랫폼이 무엇인지 모릅니다. 창의 메모리 페이지는 4K 페이지에 할당됩니다. 즉, 한 번에 전체 페이지를 캐시 해제되도록 설정할 수 있음을 의미하므로 4K 정렬이 필요할 수도 있습니다. 아아, 그래도, 나는 당신의 시스템에 대해 더 많이 알지 못한다고 말할 수 없다 ... – Goz