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

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};

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

就你给的代码来看, 这是为了控制四个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么~

【热门文章】
【热门文章】