一般来说,C/C++中因为bool类型的变量常常被赋值为true或false,所以给人的第一印象为该变量只占1个bit,相比uint8_t能够大大减小内存空间。
然而,在单片机中,因为编译器的差异,bool类型数据大多数仍然占1个byte,即8个bit,甚至在上位机中bool类型占用4个byte。因此,STM32/GD32编程中,还是尽量少用bool类型数据,如果是在函数体内声明局部bool类型变量,那么整体程序不会受到影响,麻烦的是如果结构体成员类型用了bool,那么可能存在意想不到的风险。
注:如果实在想节省空间,用位域和联结体是一个不错的选择,如以下代码。
typedef union
{
uint32_t word;
struct
{
uint32_t ctrl_enable_flag_USB :1;//0:禁用 1:使能
uint32_t ctrl_enable_flag_typec1 :1;
uint32_t ctrl_enable_flag_typec2 :1;
uint32_t rsv_bits :29;//预留位
}bits;
}usb_ctrl_str;