OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5204|回复: 12

位带操作

[复制链接]

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
发表于 2016-11-11 18:08:23 | 显示全部楼层 |阅读模式
1金钱
今天刚学完位带操作,也基本明白了位带操作的基本思路:就是把相应寄存器的位映射到一个32位的地址,然后对这个地址进行写1或者写0操作,但是我实在理解不了这样操作怎么就好处多多,怎么就可以防止被中断打断主程序指令了,(好像是说改变了寄存器的读改写的操作过程)。真的不明白位带操作优点的真正含义。

最佳答案

查看完整内容[请看2#楼]

STM32的位操作,编译器会生成原子操作指令。这样子就安全了。不明白 原子操作 自己去百度。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-11 18:08:24 | 显示全部楼层
STM32的位操作,编译器会生成原子操作指令。这样子就安全了。不明白 原子操作 自己去百度。
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2016-11-11 18:13:22 | 显示全部楼层
其中一个原因:32的寄存器不能像51那样有位操作
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-11-11 20:04:14 来自手机 | 显示全部楼层
Akatsuki_lim 发表于 2016-11-11 18:13
其中一个原因:32的寄存器不能像51那样有位操作

其实楼主说的中断打断主程序和位操作指令关系不太大。主要是ARM的运算指令不能操作直接地址吧。
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-11-12 08:13:25 | 显示全部楼层
应该还有另外一种好处:就是比用GPIO_ReSetBits()/GPIO_SetBits()效率更高
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2016-11-12 09:21:11 | 显示全部楼层
本帖最后由 dozm 于 2016-11-12 09:25 编辑

应该是习惯了51单片机的那种IO口操作方式,用起来比较方便。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-12 11:38:43 | 显示全部楼层
dozm 发表于 2016-11-12 09:21
应该是习惯了51单片机的那种IO口操作方式,用起来比较方便。

51单片机有专门的位操作函数
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-12 11:39:50 | 显示全部楼层
qingyu111 发表于 2016-11-12 08:13
应该还有另外一种好处:就是比用GPIO_ReSetBits()/GPIO_SetBits()效率更高

这个我还不知道它内部真正的原理,不明白效率上为什么就高。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-12 11:40:39 | 显示全部楼层
操作系统 发表于 2016-11-11 22:01
STM32的位操作,编译器会生成原子操作指令。这样子就安全了。不明白 原子操作 自己去百度。

这估计是位操作的强大优点,但是为什么位操作并不常用
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-12 11:41:56 | 显示全部楼层
K.O.Carnivist 发表于 2016-11-11 20:04
其实楼主说的中断打断主程序和位操作指令关系不太大。主要是ARM的运算指令不能操作直接地址吧。

没有接触过ARM,这方面我真是一点也不懂。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-12 11:42:43 | 显示全部楼层
Akatsuki_lim 发表于 2016-11-11 18:13
其中一个原因:32的寄存器不能像51那样有位操作

感觉51单片机大部分都是直接对位进行操作。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-12 12:35:13 | 显示全部楼层
ouxili 发表于 2016-11-12 11:40
这估计是位操作的强大优点,但是为什么位操作并不常用

51单片机的C语言不是标准的C语言。有位操作指令。标准的C语言没有位操作指令。但有位操作运算符。编译器会自动完成 位操作指令。完成不用担心这个问题。这个问题不是问题呀。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-13 09:49:44 | 显示全部楼层
dozm 发表于 2016-11-12 09:21
应该是习惯了51单片机的那种IO口操作方式,用起来比较方便。

确实是这样的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表