OpenEdv-开源电子网

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

通俗的位绑定讲解

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
发表于 2014-4-19 15:09:59 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-4-19 15:40:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-19 16:18:56 | 显示全部楼层
请不要发这种链接到别的论坛的分享帖。谢谢。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-19 18:38:53 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
抱歉哈、、这是我写的博客、、不是论坛、、
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-19 18:41:16 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我只是想分享下我学习时的方法和思路、、
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-19 23:13:00 | 显示全部楼层
回复【5楼】墨迹:
---------------------------------
可以直接发论坛。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2014-4-19 23:45:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-20 09:05:11 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-20 09:05:37 | 显示全部楼层
回复【7楼】qq371833846:
---------------------------------
位绑定就相当于直接操作地址  你说快吗??
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2014-4-20 15:02:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-20 15:49:25 | 显示全部楼层
回复【10楼】qq371833846:
---------------------------------
左移和加减是很快的、、而且用宏定义的时候也是很快的、、也就是为什么有些函数可以用宏定义来表示、、这样也有利于提高运算速度
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-4-20 17:51:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-4-20 18:03:32 | 显示全部楼层
回复【12楼】toddchen:
---------------------------------
谢谢哈、、希望能帮到别人
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-10-23
在线时间
0 小时
发表于 2015-10-23 21:37:21 | 显示全部楼层
楼主提供的宏定义代码有错误,不知道楼主有没有全部验证所述宏定义代码,希望楼主以认真负责的态度对待读者。
#define GPIOA_ODR_A (GPIOA_BASE+0X0C)
#define GPIOA_IDR_A (GPIOA_BASE+0X08)
#define GPIOB_ODR_A (GPIOB_BASE+0X0C)
#define GPIOB_IDR_A (GPIOB_BASE+0X08)
#define GPIOC_ODR_A (GPIOC_BASE+0X0C)
#define GPIOC_IDR_A (GPIOC_BASE+0X08)
#define GPIOD_ODR_A (GPIOD_BASE+0X0C)
#define GPIOD_IDR_A (GPIOD_BASE+0X08)
#define GPIOE_ODR_A (GPIOE_BASE+0X0C)
#define GPIOE_IDR_A (GPIOE_BASE+0X08)
#define GPIOF_ODR_A (GPIOF_BASE+0X0C)
#define GPIOF_IDR_A (GPIOF_BASE+0X08)

#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5))+BitNum)

#define PAout(n) BitBand(GPIOA_ODR_A,n)
#define PAin(n) BitBand(GPIOA_IDR_A,n)
#define PBout(n) BitBand(GPIOB_ODR_A,n)
#define PBin(n) BitBand(GPIOB_IDR_A,n)
#define PCout(n) BitBand(GPIOC_ODR_A,n)
#define PCin(n) BitBand(GPIOC_IDR_A,n)
#define PDout(n) BitBand(GPIOD_ODR_A,n)
#define PDin(n) BitBand(GPIOD_IDR_A,n)
#define PEout(n) BitBand(GPIOE_ODR_A,n)
#define PEin(n) BitBand(GPIOE_IDR_A,n)
#define PFout(n) BitBand(GPIOF_ODR_A,n)
#define PFin(n) BitBand(GPIOF_IDR_A,n)

//PA口的流水灯程序,
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIOA->CRL=0X33333333;
while(1){
PAout(0)=0;
Delay(0x2FFFFF);
PAout(0)=1;
Delay(0x2FFFFF);
PAout(1)=0;
Delay(0x2FFFFF);
PAout(1)=1;
Delay(0x2FFFFF);
PAout(2)=0;
Delay(0x2FFFFF);
PAout(2)=1;
Delay(0x2FFFFF);
PAout(3)=0;
Delay(0x2FFFFF);
PAout(3)=1;
Delay(0x2FFFFF);
Delay(0x2FFFFF);
PAout(4)=0;
Delay(0x2FFFFF);
PAout(4)=1;
Delay(0x2FFFFF);
PAout(5)=0;
Delay(0x2FFFFF);
PAout(5)=1;
Delay(0x2FFFFF);
PAout(6)=0;
Delay(0x2FFFFF);
PAout(6)=1;
Delay(0x2FFFFF);
PAout(7)=0;
Delay(0x2FFFFF);
PAout(7)=1;
Delay(0x2FFFFF);
}}
void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}

回复 支持 反对

使用道具 举报

29

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2015-4-26
在线时间
5 小时
发表于 2015-11-18 22:17:27 | 显示全部楼层
够通俗~~~~~~
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-4-5
在线时间
0 小时
发表于 2015-12-5 10:51:35 | 显示全部楼层
你好:我是想问一下关于位邦定的速度问题。
  比如我要让PA.2输出高:普通的做法是GPIOA->ODR|=1<<2; //PA.2输出高
  然后使用位绑定: Aout(2)=1;相当于=》  *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5))+BitNum<<2)=1;   宏定义又不会在预编译的时候先把这些结果计算出来,他只是进行简单的替换而已。普通输出有一个左移和一个或运算,然而位绑定的做法除了有几个加法、两个与运算加上两个左移。这样是速度还会比普通的做法快吗?真的有这个疑惑,会不会我自己理解错了呢?请各位理解帮我理解一些
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-4-5
在线时间
0 小时
发表于 2015-12-5 10:52:22 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
正点原子大哥你好:我是想问一下关于位邦定的速度问题。
  比如我要让PA.2输出高:普通的做法是GPIOA->ODR|=1<<2; //PA.2输出高
  然后使用位绑定: Aout(2)=1;相当于=》  *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5))+BitNum<<2)=1;   宏定义又不会在预编译的时候先把这些结果计算出来,他只是进行简单的替换而已。普通输出有一个左移和一个或运算,然而位绑定的做法除了有几个加法、两个与运算加上两个左移。这样是速度还会比普通的做法快吗?真的有这个疑惑,会不会我自己理解错了呢?请各位理解帮我理解一些
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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