2015-01-22 1 views
0
#define MMIO_READ8(Address)     (*(volatile UINT8 *)(Address)) 

Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space 

Mutosoft 컴파일러 (MSVC)를 사용 중이며 아래 경고 메시지가 나타납니다. 컴파일러 플래그에 경고를 설정하여이 경고의 해결에 도움이 필요합니다.휘발성 UINT8 포인터 - C 프로그래밍

경고 C4306 : '형식 캐스트'큰 크기의 ' * 휘발성 UINT8'에서 '서명 INT'에서 변환

+0

32 비트 기계 또는 64 비트? 32 비트 인 경우 포인터의 크기는 4 바이트이므로 경고를 무시할 수 있습니다. – Matt

답변

3

According to the MSDN이 대상 유형 (포인터) 소스 유형보다 더 큰 일이 발생하기 때문에 (unsigned int). 나는 당신이 unsigned int이 4 바이트이고 포인터가 8 바이트라는 것을 의미하는 64 비트 빌드를하고 있다고 가정합니다.

MSDN 페이지에서도이 경우 목표 값 (예 : uppper 32bit)의 uppper 비트가 0으로되어 있음을 설명합니다. 이는 원하는 것일 수 있습니다.

이 경고가 나타나지 않도록하려면 포인터를 전송하기 전에 먼저 충분히 큰 정수 유형으로 캐스팅하도록 매크로를 조정할 수 있습니다. 예 : 시도하십시오

#define MMIO_READ8(Address) (*(volatile UINT8 *)(intptr_t)(Address)) 
+0

감사합니다. 고정 된. –