[应用相关] 请教stm32中Bit操作的高效实现方法

[复制链接]
3948|1
 楼主| imffo 发表于 2008-10-15 15:41 | 显示全部楼层 |阅读模式
我的程序中需要大量的标志位,一个标志位用一个字节代替,操作起来效率还可以,但是太费空间。如何用最高的效率来实现标志位的操作,能否列举一下例子参考一下,多谢啦!

我试着用如下的位映射方法控制标志位,效率是很高,程序空间利用率也高,但是在iar的调试环境中无法监测变量的变化,非常郁闷。
// 把“位带地址+位序号”转换别名地址宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define FlagByte 0x20001000
__no_init u32  FlagBit0 @BITBAND(FlagByte , 0);
__no_init u32  FlagBit1 @BITBAND(FlagByte , 1);
香水城 发表于 2008-10-15 16:18 | 显示全部楼层

使用Bitbanding就是一种高效的实现方法

调试环境中无法监测变量的变化是调试器的问题,不能因为调试器的问题而说这个方法不好。


其实你的程序写法可以通过定义一个数组变得更简练一些。

比如你有100个位变量,可以这样写:u32 Flags[100] @BITBAND(0x20001000, 0);

再用宏定义访问:
#define Flag0 Flags[0]
#define Flag1 Flags[1]

也许你能够在调试器中看到Flags这个数组。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

6

帖子

0

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