2011-02-07 5 views
0

이 코드가 포인터를 64 비트 경계에 정렬하는 방법을 알고 싶습니다. 나는이 코드를 uboot cpu/mpc85xx/ether_fcc.c에서 발견했다. 여기서 기본 이더넷 컨트롤러는 버퍼 포인터가 64 비트 경계에 정렬되도록 요구합니다. 이 코드는 어떻게 포인터를 64 비트 경계에 정렬합니까?

uint cbd_bufaddr; 
volatile uchar *NetRxPackets[PKTBUFSRX]; 
cbd_bufaddr = (uint)NetRxPackets[i]; 

나는 아래의 체크 포인터가 64 비트 정렬되도록 보장하기 위해 필수입니다 생각하지만, 난 아무데도 uboot 코드를 볼 수 없습니다.

나는 분명히 분명한 사실을 누군가 지적 할 수 있으면 정말 고맙겠습니다.

+0

NetRxPackets [i]의 값이 어디에서 왔는지 표시하지 않았으므로 그 값을 정렬해야합니다. –

답변

4

원래 코드의 아무 것도 정렬에 대해 아무 것도 보장하지 않습니다. 첫 번째 코드 블록은 NetRxPackets 배열 밖으로 포인터를 가져 와서 cbd_bufaddr에 고정시킵니다. 제공 한 코드에는 배열 내의 포인터에 정렬 제한이 있음을 알 수 없습니다. 진행 상황을 알려주는 배열을 초기화하는 코드를 보여 주어야합니다.

+0

사실 지금 생각해 보면 32 비트 시스템에서는 64 비트 경계가 64 비트 경계에 정렬되어 있는지 확신 할 수 없습니다. 사양을 풀고 명확하게하겠습니다. –

+0

스펙을 보았을 때 나는 그것에 대해 아무 것도 보지 못했습니다. 이 경우 포인터 유형 배열이므로 기본 정렬이 가능할 것으로 보입니다. –

+1

실제로 배열에 저장된 값은 올바른 정렬을 가져야합니다. 어쨌든 배열 자체의 정렬은 부적합합니다. – caf

관련 문제