OpenEdv-开源电子网

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

关于原子哥的STM32开发指南库函数版V1.5,P114中4.7章中的一段代码

[复制链接]

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-3-19
在线时间
1 小时
发表于 2015-4-3 17:18:14 | 显示全部楼层 |阅读模式
5金钱
原子哥:
有一段是这样写的,同样的方法我们双击“IS_GPIO_PIN”,右击“go to defition of...”,定位到下面的定义:
#define IS_GPIO_PIN(PIN) ((((PIN)&(unit16_t)0x00)==0x00)&&((PIN)!=(uint16_t)0x00))
可以看出,GPIO_PIN成员变量的取值范围是0x0000到0xffff,
我看不懂这段代码啊,跪求解答!感谢!

最佳答案

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

保证参数合法 即((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))等于1 也就是(((PIN) & (uint16_t)0x00) == 0x00) 和 ((PIN) != (uint16_t)0x00)同时为真 又 (uint16_t)0x00=0x0000   所以要求(PIN) & 0x0000=0x0000且(PIN) !=0x0000 那么PIN的范围就是0x0001到0xffff了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-4-3 17:18:15 | 显示全部楼层
保证参数合法 即((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))等于1
也就是(((PIN) & (uint16_t)0x00) == 0x00) 和 ((PIN) != (uint16_t)0x00)同时为真
又 (uint16_t)0x00=0x0000  
所以要求(PIN) & 0x0000=0x0000且(PIN) !=0x0000
那么PIN的范围就是0x0001到0xffff了
回复

使用道具 举报

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-3-19
在线时间
1 小时
 楼主| 发表于 2015-4-5 11:54:28 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
谢谢你。
#define IS_GPIO_PIN(PIN) ((((PIN)&(unit16_t)0x00)==0x00)&&((PIN)!=(uint16_t)0x00))
这个不是宏定义吗?不是看到IS_GPIO_PIN(PIN)这个函数就当做后面这个逻辑表达式的值吗?
新人,再次感谢你!
回复

使用道具 举报

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-3-19
在线时间
1 小时
 楼主| 发表于 2015-4-5 12:07:54 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
你回答的意思我看明白了,就是不明白这个宏定义为什么就变成保证参数合法了呢,假设后面是假,那么就把前面的当作0不是吗。。。求帮助!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 03:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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