C语言中用按位或( | )定义变量是什么玩法?

为什么像下面这样定义两个数组?

const uint16_t LEDS = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
const uint16_t LED[4] = {GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};
阅读 5.5k
1 个回答

你这是嵌入式的编程吧, 玩嵌入式不懂位运算不合适哈 ?

就你给的代码来看, 这是为了控制四个LED的, 且应该有类似这样的定义:

#define GPIO_Pin_12 (1<<12)
#define GPIO_Pin_13 (1<<13)
#define GPIO_Pin_14 (1<<14)
#define GPIO_Pin_15 (1<<15)

通常要点亮LED 0, 将对应的GPIO(一个寄存器, 假设就叫GPIO_LED)的值与GPIO_Pin_12或(|)运算, 即GPIO_LED | GPIO_Pin_12, 对应到你的变量定义也可以是GPIO_LED | LED[0]. 类推点亮其他LED.

有时我们需要一次把四个LED全都点亮, 我们可以这么做: GPIO_LED | LED[0] | LED[1] | LED[2] | LED[3].
等价于GPIO_LED | (LED[0] | LED[1] | LED[2] | LED[3]), 括号里的东西不就是你的变量LEDS么~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进