STM32F4 검색에서 GPIO 핀용 드라이버를 작성하는 방법을 배우려고합니다. 나는 자습서를 통과하고 있었고, 난이 줄을 건너 온 :C 코드의 비트 연산
static void hal_gpio_configure_pin_mode (GPIO_TypeDef *GPIOx, uint16_t pin_no, uint32_t mode)
{
GPIOx->MODER |= (mode << (2* pin_no));
}
나는 임베디드 시스템에 비교적 새로운 오전 GPIOX->MODER |= (mode << (2* pin_no));
가 무엇을 모른다. 또한, 모드가 32 비트 인 동안 왜 pin_no가 16 비트인지 나는 알지 못합니다. 나는 < <이 왼쪽 쉬프트 비트 연산자임을 알고있다. 그러나 나는 아직도 완전한 맥락을 얻지 못한다.
누구나이 모든 것을 설명 할 수 있습니까? 광고 GPIOx->MODER |= (mode << (2* pin_no));
설명하려고
는 이유'pin_no'와'mode' 동일한 유형을 가져야한다을 없다 그것들의 값은 add 나 곱셈과 같은 연산에서 사용되는 것과 같이 함께 사용되지 않고 대신 단순히 값 ('mode')을 얼마나 많이 계산할 것인가 (2)와 함께 사용되는 인덱스입니다. shift는 단순히 숫자 여야 만하며, shift되는 것과 같은 타입 일 필요는 없습니다. 그래서'+'와'* '와 같은 연산자는 피연산자가 같은 타입으로 변환 될 것을 요구하지만,'<< '연산자의 왼쪽과 오른쪽에 다른 유형이있을 수 있습니다. –
mo 칩에 대한 문서의 gpio 섹션에 등록하십시오. 이것은 단순히이 레지스터에 몇 비트를 설정하는 것입니다. –
Google : "어떻게 비트 연산자가 작동합니까?" 또는 책을 읽으십시오. – Lundin