打印

STM32 位带操作 和 代码执行效率 的疑问

[复制链接]
1426|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
libertyzx|  楼主 | 2013-6-16 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问下大家,
stm32 的位带操作片上外设区: 0x4000_0000-0x400F_FFFF(最低1MB )上所以寄存器都支持位带操作?
比如RCC,ADC 什么的都支持吗?
看了《Cortex-M3权威指南》在网上找了下资料,似乎都没有说····

还有一个代码执行效率的疑问,
a &=~(1 << 5);      // 将变量  a 的第5位清0
a |= (1 << 6);        // 将变量  a 的第6位置1
a ^=(1 << 2);       // 将变量  a 的第2位取反
这三条c代码和
a &= 0xFFFFFFDF;       // 将变量  a 的第5位清0
a |=  0x00000040;     // 将变量  a 的第6位置1
a ^= 0x00000002;     // 将变量  a 的第2位取反
这三条代码执行效率是否一样,我在MDK上调试出来看汇编是一样,不知道其他编译器,比如IAR里是否一样?

沙发
aozima| | 2013-6-16 15:50 | 只看该作者
(1 << 2)  是由编译器去计算的,而不是由MCU计算的,可以去了解一下编译器的实现。

另外, (1 << 2)  并不等于 0x00000002

使用特权

评论回复
板凳
aozima| | 2013-6-16 15:58 | 只看该作者
查位带区的映射地址,再查外设地址是否在这个区间内,如果是,则可以使用位带区访问。

使用特权

评论回复
地板
libertyzx|  楼主 | 2013-6-16 16:00 | 只看该作者
aozima 发表于 2013-6-16 15:50
(1

是 0x00000004 ,额少算了一位:L

使用特权

评论回复
5
libertyzx|  楼主 | 2013-6-16 16:01 | 只看该作者
aozima 发表于 2013-6-16 15:58
查位带区的映射地址,再查外设地址是否在这个区间内,如果是,则可以使用位带区访问。 ...

都是在范围内,那就是都能用位带操作了,那样就方便多了。
我还是先去看下编译器的实现吧,谢谢了。

使用特权

评论回复
6
trumpxp| | 2013-6-16 20:13 | 只看该作者
帮你看看先   编译器的使用   应该问题不大

使用特权

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

本版积分规则

个人签名:日子真难过····

2

主题

39

帖子

1

粉丝