C 编码中的按位运算
Bitwise operations in C coding
我正在尝试学习如何在 STM32F4 Discovery 中为 GPIO 引脚编写驱动程序。我在浏览教程时遇到了这一行:
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));
是做什么的。另外,我不知道为什么 pin_no 是 16 位,而 mode 是 32 位。我知道 << 是左移按位运算符。但我仍然没有得到完整的上下文。
任何人都可以解释这一切吗?
试图解释行 GPIOx->MODER |= (mode << (2* pin_no));
:
GPIOx
是一个指向结构的指针
GPIOx->MODER
访问此结构中的成员 MODER
x |= y
是x = x | y
的缩写,意思是“对x和y进行逻辑或,并将结果写回x
mode << (2* pin_no)
表示将变量mode
的内容左移两次pin_no
位。
因此,该行的意思是“获取 GPIOx->MODER
的内容,将其与 mode
的左移位内容按位或。
我正在尝试学习如何在 STM32F4 Discovery 中为 GPIO 引脚编写驱动程序。我在浏览教程时遇到了这一行:
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));
是做什么的。另外,我不知道为什么 pin_no 是 16 位,而 mode 是 32 位。我知道 << 是左移按位运算符。但我仍然没有得到完整的上下文。
任何人都可以解释这一切吗?
试图解释行 GPIOx->MODER |= (mode << (2* pin_no));
:
GPIOx
是一个指向结构的指针GPIOx->MODER
访问此结构中的成员MODER
x |= y
是x = x | y
的缩写,意思是“对x和y进行逻辑或,并将结果写回xmode << (2* pin_no)
表示将变量mode
的内容左移两次pin_no
位。
因此,该行的意思是“获取 GPIOx->MODER
的内容,将其与 mode
的左移位内容按位或。