打印
[ZLG-MCU]

lm3s的bitband**肋

[复制链接]
2097|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega16|  楼主 | 2007-12-6 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
LPC900| | 2007-12-7 09:24 | 只看该作者

Bit-band效率还是高的,但要看你怎么使用了

  请看下面两个例程,实现的功能完全相同,但是例程B的效率要比例程A高。这就是Bit-band的好处,它非常适合于直接对寄存器当中某一位清零或置位的操作。充分发挥Bit-band效率的前提是寄存器地址、位地址都是已知的常量。如果是变量,对不起,那必须先要计算出地址来,这样造成的低效率可不能归罪于Bit-band。


// 例程A:采用HWREG()访问外设寄存器

#include  "hw_types.h"

#define  SYSCTL_BASE    0x400FE000              /* 定义系统控制模块的基址              */
#define  RCGC2          (SYSCTL_BASE+0x108)     /* 时钟选通控制寄存器2,其位1控制GPIOB */

int  main (void)
{
    HWREG(RCGC2) |= 0x00000002;                 // 选通GPIOB的时钟,即使能GPIOB端口
    for (;;);
}


// 例程B:采用Bit-band访问外设寄存器

#include  "hw_types.h"

#define  SYSCTL_BASE    0x400FE000              /* 定义系统控制模块的基址              */
#define  RCGC2          (SYSCTL_BASE+0x108)     /* 时钟选通控制寄存器2,其位1控制GPIOB */

int  main (void)
{
    HWREGBITW(RCGC2, 1) = 1;                    // 选通GPIOB的时钟,即使能GPIOB端口
    for (;;);
}

使用特权

评论回复
板凳
LPC900| | 2007-12-7 09:32 | 只看该作者

看看GCC的编译结果吧

对于main()函数,GCC的编译结果是:

  例程A:24字节(采用寄存器方式)
  例程B:20字节(采用Bit-band方式)

使用特权

评论回复
地板
ATmega16|  楼主 | 2007-12-8 09:38 | 只看该作者

BITBAND就只能来读写寄存器的位了。

BITBAND就只能来读写寄存器的位了。

使用特权

评论回复
5
s99060| | 2007-12-8 16:15 | 只看该作者

你也可以先指定变量地址

这样bit地址也就定了

使用特权

评论回复
6
平常人| | 2008-1-3 21:58 | 只看该作者

使用Bit-band代码效率高只是它的副作用

如果只是为了代码效率高没必要设计这个东西。

使用特权

评论回复
7
逐风| | 2008-1-3 23:46 | 只看该作者

仁者见仁

单片机主要的功能是看你需不需要用,虽然说不是没什么作用的功能就不需要了,但是没有这种功能你又需要的时候你就会想起它的好处了。仁者见仁……

使用特权

评论回复
8
AIRWILL| | 2008-1-6 10:58 | 只看该作者

看样子

lm3s 的 bitband 不是**肋了, 牛肋了

位读倒是没有大必要, 位写还是挺重要哪

使用特权

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

本版积分规则

109

主题

229

帖子

0

粉丝