2012-04-25 4 views
0

지금은 '프로그래밍 내장 시스템 프로그래밍'이라는 초급 수준의 책을 읽었습니다. 그것은 주변 장치에서 C를 사용하여 레지스터를 조작하는 방법을 설명하는 한 섹션을 가지고 있습니다.하드웨어 주변 장치에 레지스터 설정

이것은 처음에는 모르는 예제입니다.

uint32_t *pGpio0Set = (uint32_t *)(0x40E00018); 

이것은 32 비트 부호없는 정수를 가리키는 포인터라고 생각합니다. 또한 내가 추측 할 수있는 것은 해당 레지스터가 GPIO를 제어하고 레지스터가 0x40E00018 주소에 존재한다는 것입니다.

나는 (uint32_t *) 선행 (0x40E00018)의 의미와 그 효과에 대해 이해하지 못합니다.

앤드류

답변

1

는 그것은 type cast를 불렀다. 일반적으로 형식을 다른 형식으로 변환합니다. 이 경우 16 진수를 주소로 변환합니다. 16 진수 주변의 괄호는 불필요합니다.

0

이것은 정수 유형에서 정수를 가리키는 포인터입니다.
그렇게하지 않으면 컴파일러는 정수를 다른 유형에 할당한다고 불평합니다. 심지어 포인터 인 경우 대부분의 경우 정수가됩니다 (어떤 플랫폼에서도 사실이 아닙니다). 컴파일러는이 번호를 주소로 사용하려고합니다.

관련 문제