연산자 | 설명 |
---|---|
& | AND |
| | OR |
^ | XOR (Exclusive OR) |
~ | NOT |
<< | LEFT SHIFT |
>> | RIGHT SHIFT |
&= | AND 연산 후 할당 |
|= | OR 연산 후 할당 |
^= | XOR 연산 후 할당 |
<<= | LEFT SHIFT 연산 후 할당 |
>>= | RIGHT SHIFT 연산 후 할당 |
일반 함수와 비트 연산자의 차이는 속도에 있다.
추가적으로 내부 구조를 알아볼 수 있다는 것에 있다.
MODER에 대한 내용
사진을 보면
STM32 는 32비트 보드라서 0~31 까지 비트가 있고
2개씩 짝지어 한 포트에 16개의 핀을 구성하고 있다.
2개로 짝이어진 2개의 비트는
00 -> Input
01 -> Output
10 -> 특수 목적 (예:통신)
11 -> Analog
로 각 핀을 설정할 수 있다.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
GPIOA -> MODER = GPIOA -> MODER & (~0x11);
GPIOA -> MODER = GPIOA -> MODER | (0x01);
GPIOA -> ODR = 0x00;
만약 0번 핀이 아니라 3번 핀을 Output으로 하고 값을 1 (true) 로 하고 싶다면?
위 문서에서 3번핀은 [4, 6] -> 4번 5번 비트에 해당하기 때문에 [0, 2] -> [4, 6] 이 되려면
4칸이 움직여야 하니까 "<< 4" 를 쓴다.
ODR (Output Data Register) 를 [1000] 3, 2, 1, 0 핀 중
3번 핀을 1로 바꿔야 하니까 0x08로 나타내어야한다.
GPIOA -> MODER = GPIOA -> MODER & (~(0x11 << 4 )
GPIOA -> MODER = GPIOA -> MODER | (0x01 << 4);
GPIOA -> ODR = 0x08;
아직은 익숙하지 않은 감이 있지만 최적화를 위해 연습을 해봐야겠다.