打印
[应用相关]

请教stm32中Bit操作的高效实现方法

[复制链接]
3086|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

粉丝