OpenEdv-开源电子网

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

小白小白 C语言的请教

[复制链接]

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
发表于 2018-5-12 12:39:08 | 显示全部楼层 |阅读模式
#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x09013600) == 0x00) && ((PERIPH) != 0x00))
这种语句怎么看?是不是定义 IS_RCC_APB1_PERIPH(PERIPH)的值为后面那串。 但是后面的那一串是布尔值吗?
还有括号里面(PERIPH) 的代表什么?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

37

主题

596

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1574
金钱
1574
注册时间
2017-7-17
在线时间
308 小时
发表于 2018-5-12 12:45:37 | 显示全部楼层
反正带进去替换就可以了,实际上就是用了allert检查参数的合法性。
回复 支持 反对

使用道具 举报

41

主题

242

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2016-1-11
在线时间
132 小时
发表于 2018-5-12 19:22:23 | 显示全部楼层
C语言没有布尔类型
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2016-9-19
在线时间
10 小时
发表于 2018-5-13 00:30:44 来自手机 | 显示全部楼层
periph应该是外设吧,如GPIOA,USART1,我猜是#define periph …,编写函数库的ST官方大神给予每个外设一个唯一的编号
回复 支持 反对

使用道具 举报

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
 楼主| 发表于 2018-5-13 13:43:44 | 显示全部楼层
1014507200 发表于 2018-5-13 00:30
periph应该是外设吧,如GPIOA,USART1,我猜是#define periph …,编写函数库的ST官方大神给予每个外设一个唯 ...

((((PERIPH) & 0x09013600) == 0x00) && ((PERIPH) != 0x00)) 最后结果不是只有1和0吗?
宏定义#define    IS_RCC_APB1_PERIPH(PERIPH)      0或1?  有啥用呢?。。。。。
回复 支持 反对

使用道具 举报

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
 楼主| 发表于 2018-5-13 13:52:38 | 显示全部楼层
沧海 发表于 2018-5-12 19:22
C语言没有布尔类型

我的意思 结果是1或0;怎么看呢? 就比如 #define  x   ((a==0x01)&&(a!==x00))   假如a=1;
那么x=1?
回复 支持 反对

使用道具 举报

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
 楼主| 发表于 2018-5-13 13:53:10 | 显示全部楼层
candylife9 发表于 2018-5-12 12:45
反正带进去替换就可以了,实际上就是用了allert检查参数的合法性。

allert 是啥?警告...?
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2016-9-19
在线时间
10 小时
发表于 2018-5-13 16:05:42 | 显示全部楼层
772029356 发表于 2018-5-13 13:52
我的意思 结果是1或0;怎么看呢? 就比如 #define  x   ((a==0x01)&&(a!==x00))   假如a=1;
那么x=1?

IS_RCC_APB1_PERIPH(PERIPH) 看名知意,就是检查(PERIPH)是不是挂载在APB1总线下的外设。
这里涉及两个知识点,1. C语言里的 带参数的宏,用起来和函数差不多
                                  2. C语言严格来说是没有bool类型的,bool类型是C++的特性,但C语言                                  进行逻辑判断时候,例如if ( int_value ), 若int_value不为0,则为真,若
                                  int_value为假,则为假。
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2016-9-19
在线时间
10 小时
发表于 2018-5-13 16:09:11 | 显示全部楼层
772029356 发表于 2018-5-13 13:52
我的意思 结果是1或0;怎么看呢? 就比如 #define  x   ((a==0x01)&&(a!==x00))   假如a=1;
那么x=1?

打字太快了,补充一下,if(int_value),若int_value为0,则为假;若int_value为非0,则为真
回复 支持 反对

使用道具 举报

37

主题

596

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1574
金钱
1574
注册时间
2017-7-17
在线时间
308 小时
发表于 2018-5-14 10:01:37 | 显示全部楼层
772029356 发表于 2018-5-13 13:53
allert 是啥?警告...?

不是allert,assert
回复 支持 反对

使用道具 举报

2

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2016-11-16
在线时间
111 小时
发表于 2018-5-14 10:35:54 | 显示全部楼层
assert_param   
检测库函数参数的合法性。。。   源代码看了一下  是检查参数所代表的外设地址是否符合库函数所操作的外设的地址
回复 支持 反对

使用道具 举报

8

主题

570

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2914
金钱
2914
注册时间
2016-5-13
在线时间
184 小时
发表于 2018-5-15 17:32:23 | 显示全部楼层
带有参数的宏定义。用的时候按照替换去理解就行了。这还不算难理解了,难理解点的是带有#和##的宏定义。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 15:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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