单片机中bool类型数据的隐藏陷阱

文章探讨了C/C++中bool类型在实际应用中的内存占用问题,尤其是在单片机如STM32/GD32中,bool可能占用1个字节而非预期的1个位。作者建议避免在结构体成员中使用bool,以防止潜在风险,并推荐使用位域和联结体来节省空间。
摘要由CSDN通过智能技术生成

一般来说,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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值