[ZLG-MCU] lm3s的bitband**肋

[复制链接]
3430|7
 楼主| ATmega16 发表于 2007-12-6 17:12 | 显示全部楼层 |阅读模式
bitband没啥用处。<br />用bitband读写变量的位,地址转换就要费多条指令,<br />比读-改-写还慢。<br /><br />bitband就拿来读写IO口了,<br />读写IO口用驱动库函数或者用位域,都很方便。<br />bitband没啥优势。
LPC900 发表于 2007-12-7 09:24 | 显示全部楼层

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

  请看下面两个例程,实现的功能完全相同,但是例程B的效率要比例程A高。这就是Bit-band的好处,它非常适合于直接对寄存器当中某一位清零或置位的操作。充分发挥Bit-band效率的前提是寄存器地址、位地址都是已知的常量。如果是变量,对不起,那必须先要计算出地址来,这样造成的低效率可不能归罪于Bit-band。<br /><br /><br />//&nbsp;例程A:采用HWREG()访问外设寄存器<br /><br />#include&nbsp;&nbsp;&quot;hw_types.h&quot;<br /><br />#define&nbsp;&nbsp;SYSCTL_BASE&nbsp;&nbsp;&nbsp;&nbsp;0x400FE000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;定义系统控制模块的基址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />#define&nbsp;&nbsp;RCGC2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SYSCTL_BASE+0x108)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;时钟选通控制寄存器2,其位1控制GPIOB&nbsp;*/<br /><br />int&nbsp;&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(RCGC2)&nbsp;|=&nbsp;0x00000002;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;选通GPIOB的时钟,即使能GPIOB端口<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;);<br />}<br /><br /><br />//&nbsp;例程B:采用Bit-band访问外设寄存器<br /><br />#include&nbsp;&nbsp;&quot;hw_types.h&quot;<br /><br />#define&nbsp;&nbsp;SYSCTL_BASE&nbsp;&nbsp;&nbsp;&nbsp;0x400FE000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;定义系统控制模块的基址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />#define&nbsp;&nbsp;RCGC2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SYSCTL_BASE+0x108)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;时钟选通控制寄存器2,其位1控制GPIOB&nbsp;*/<br /><br />int&nbsp;&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREGBITW(RCGC2,&nbsp;1)&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;选通GPIOB的时钟,即使能GPIOB端口<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;);<br />}<br />
LPC900 发表于 2007-12-7 09:32 | 显示全部楼层

看看GCC的编译结果吧

对于main()函数,GCC的编译结果是:<br /><br />  例程A:24字节(采用寄存器方式)<br />  例程B:20字节(采用Bit-band方式)<br />
 楼主| ATmega16 发表于 2007-12-8 09:38 | 显示全部楼层

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

BITBAND就只能来读写寄存器的位了。
s99060 发表于 2007-12-8 16:15 | 显示全部楼层

你也可以先指定变量地址

这样bit地址也就定了
平常人 发表于 2008-1-3 21:58 | 显示全部楼层

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

如果只是为了代码效率高没必要设计这个东西。
逐风 发表于 2008-1-3 23:46 | 显示全部楼层

仁者见仁

单片机主要的功能是看你需不需要用,虽然说不是没什么作用的功能就不需要了,但是没有这种功能你又需要的时候你就会想起它的好处了。仁者见仁……
AIRWILL 发表于 2008-1-6 10:58 | 显示全部楼层

看样子

lm3s&nbsp;的&nbsp;bitband&nbsp;不是**肋了,&nbsp;牛肋了<br /><br />位读倒是没有大必要,&nbsp;位写还是挺重要哪
您需要登录后才可以回帖 登录 | 注册

本版积分规则

109

主题

229

帖子

0

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