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

[复制链接]
10616|8
 楼主| magic_yuan 发表于 2014-1-3 22:01 | 显示全部楼层 |阅读模式
各位大侠,
   用STM32写程序,如何定义位变量?
   在写程序时用整形代替也可以,但总感觉不方便,也觉得浪费空间。
   网上查了资料也没找到详细的。
   bit a=0;
   这样的定义编译报错。
  感谢啊!

amwrdfe 发表于 2014-1-3 22:06 | 显示全部楼层
用段位
老鱼探戈 发表于 2014-1-4 11:28 | 显示全部楼层
本帖最后由 老鱼探戈 于 2014-1-4 11:29 编辑

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

  5. typedef struct{
  6.         BYTE bOKKeyValid:1;
  7.         BYTE bLeftKeyValid:1;
  8.         BYTE bRightKeyValid:1;
  9.         BYTE bRECKeyValid:1;
  10.         BYTE bCalibrationGyro:1;
  11.         BYTE bCAPSLock:1;
  12. }bmKEY_FUNC;
znmcu 发表于 2014-1-4 11:49 来自手机 | 显示全部楼层
bit是c5的,那是因为51的data区里有两个字节bdata是可以位寻址的。arm没有这种硬件特性,但可以用位段

评论

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

多谢大侠,
  再问一下,如果得到这样的结构体位变量,那对其操作时是否只消耗一个始终周期呢?
ZhangStudy 发表于 2014-1-4 21:45 | 显示全部楼层
现在C语言的优化机制很好,基本上用与操作、或操作设置位就可以了。效率和位段、位变量基本一样,甚至编译的结果代码都一样。
另外,C语言程序不应该依赖某个语句消耗周期的方法,需要精确计算,使用定时器更好。

一家之言,仅供参考。
老鱼探戈 发表于 2014-1-5 15:07 | 显示全部楼层
magic_yuan 发表于 2014-1-4 15:24
多谢大侠,
  再问一下,如果得到这样的结构体位变量,那对其操作时是否只消耗一个始终周期呢? ...

一般情况下是的,不过这个跟编译器有关,还有内部和外部RAM
renwocai 发表于 2014-1-5 17:16 | 显示全部楼层
znmcu 发表于 2014-1-4 11:49
bit是c5的,那是因为51的data区里有两个字节bdata是可以位寻址的。arm没有这种硬件特性,但可以用位段 ...

抓一个大神的错误。51是16个字节的BDATA,共128个位。
kingsr 发表于 2016-7-20 17:41 | 显示全部楼层
修改一个错误
用法KEY_FlAG.bKeyFlag.bLeftKeyValid

全直接访问是 KEY_FlAG.uKeyFlag
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

359

主题

2770

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部