打印

STM32 C语言中如何定义位变量

[复制链接]
10283|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
magic_yuan|  楼主 | 2014-1-3 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
amwrdfe| | 2014-1-3 22:06 | 只看该作者
用段位

使用特权

评论回复
板凳
老鱼探戈| | 2014-1-4 11:28 | 只看该作者
本帖最后由 老鱼探戈 于 2014-1-4 11:29 编辑

给你一个8位机结构体位定义做参考,32位机改成UINT32就可以了。用法uKeyFlag.bKeyFlag.bLeftKeyValid
typedef union{
        BYTE uKeyFlag;
        bmKEY_FLAG bKeyFlag;
}KEY_FlAG;

typedef struct{
        BYTE bOKKeyValid:1;
        BYTE bLeftKeyValid:1;
        BYTE bRightKeyValid:1;
        BYTE bRECKeyValid:1;
        BYTE bCalibrationGyro:1;
        BYTE bCAPSLock:1;
}bmKEY_FUNC;

使用特权

评论回复
地板
znmcu| | 2014-1-4 11:49 | 只看该作者
bit是c5的,那是因为51的data区里有两个字节bdata是可以位寻址的。arm没有这种硬件特性,但可以用位段

使用特权

评论回复
评论
magic_yuan 2014-1-4 15:20 回复TA
多谢大侠。网上查查段位资料看看。 
5
magic_yuan|  楼主 | 2014-1-4 15:24 | 只看该作者
老鱼探戈 发表于 2014-1-4 11:28
给你一个8位机结构体位定义做参考,32位机改成UINT32就可以了。用法uKeyFlag.bKeyFlag.[/backc ...

多谢大侠,
  再问一下,如果得到这样的结构体位变量,那对其操作时是否只消耗一个始终周期呢?

使用特权

评论回复
6
ZhangStudy| | 2014-1-4 21:45 | 只看该作者
现在C语言的优化机制很好,基本上用与操作、或操作设置位就可以了。效率和位段、位变量基本一样,甚至编译的结果代码都一样。
另外,C语言程序不应该依赖某个语句消耗周期的方法,需要精确计算,使用定时器更好。

一家之言,仅供参考。

使用特权

评论回复
7
老鱼探戈| | 2014-1-5 15:07 | 只看该作者
magic_yuan 发表于 2014-1-4 15:24
多谢大侠,
  再问一下,如果得到这样的结构体位变量,那对其操作时是否只消耗一个始终周期呢? ...

一般情况下是的,不过这个跟编译器有关,还有内部和外部RAM

使用特权

评论回复
8
renwocai| | 2014-1-5 17:16 | 只看该作者
znmcu 发表于 2014-1-4 11:49
bit是c5的,那是因为51的data区里有两个字节bdata是可以位寻址的。arm没有这种硬件特性,但可以用位段 ...

抓一个大神的错误。51是16个字节的BDATA,共128个位。

使用特权

评论回复
9
kingsr| | 2016-7-20 17:41 | 只看该作者
修改一个错误
用法KEY_FlAG.bKeyFlag.bLeftKeyValid

全直接访问是 KEY_FlAG.uKeyFlag

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝