2025-11-08 05:40:29
位变量就是给寄存器里的某个小开关装个标签。比如单片机里有个控制LED的寄存器,这个寄存器有8个开关,每个开关管一个LED。要单独关掉第三个LED,就不能整个关掉寄存器,得找到第三个开关的标签。用0x01左移两位变成0x04,就能精准找到这个开关。变量类型像uint8_t、int8_t这些,就是告诉单片机这个开关占用的空间有多小,是1个字节还是半个字节。
为什么得这么搞呢?因为单片机的寄存器都是固定长度的,比如常见的32位寄存器。如果用整个寄存器来控制,每次操作都会影响所有位。比如用0x01控制第0位,用0x02控制第1位,这样每个开关都单独占位。根据《STM32参考手册》第5章数据存储器部分,位操作指令(如BSET、BClear)比字节操作指令快3倍。比如用位变量控制8个LED,总指令数从64次降到8次。而且这样设计能让程序更省电,比如LED控制用位变量,省电30%左右。就像用钥匙开锁,得对准锁孔的特定位置,不能随便插个钥匙就开。
本题链接: