野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14418|回复: 7

想知道这段程序的意思

[复制链接]
发表于 2014-12-4 14:37:07 | 显示全部楼层 |阅读模式
#define ON  0
#define OFF 1

#define LED1(a)        if (a)        \
                                        GPIO_SetBits(GPIOB,GPIO_Pin_0);\
                                        else                \
                                        GPIO_ResetBits(GPIOB,GPIO_Pin_0)

#define LED2(a)        if (a)        \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_4);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_4)

#define LED3(a)        if (a)        \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_3);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_3)

回复

使用道具 举报

发表于 2014-12-4 14:38:51 | 显示全部楼层
#define LED1(a)        if (a)        \
                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);\
                                         else                \
                                         GPIO_ResetBits(GPIOB,GPIO_Pin_0)


相当于#define LED1(a)        if (a)     GPIO_SetBits(GPIOB,GPIO_Pin_0); else  GPIO_ResetBits(GPIOB,GPIO_Pin_0);


\ 是续行符
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-4 14:50:49 | 显示全部楼层
我知道 \ 是续行符,就是想知道 #define LED1(a)  if (a)    GPIO_SetBits(GPIOB,GPIO_Pin_0); else  GPIO_ResetBits(GPIOB,GPIO_Pin_0);   的含义。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-4 14:55:09 | 显示全部楼层
flyleaf 发表于 2014-12-4 14:38
#define LED1(a)        if (a)        \
                                         GPIO_SetBits(GPIOB, ...

因为在学到流水灯的时候是这么定义的
#define ON  0
#define OFF 1

而到下一课程按键的时候
#define Key_ON        0
#define Key_OFF        1
所以有点弄不明白
回复 支持 反对

使用道具 举报

发表于 2014-12-4 15:03:21 | 显示全部楼层
fant 发表于 2014-12-4 14:55
因为在学到流水灯的时候是这么定义的
#define ON  0
#define OFF 1

把它当成一个函数就好,带参宏,用起来跟函数差不多
回复 支持 反对

使用道具 举报

发表于 2014-12-4 16:13:09 | 显示全部楼层
可以点击GPIO_SetBits按F12看看这是什么定义的嘛,那可以看的挺明白的
捕获.PNG
回复 支持 反对

使用道具 举报

发表于 2014-12-5 10:02:33 | 显示全部楼层
本帖最后由 11kxmx 于 2014-12-5 10:18 编辑

定义了on off的数值,然后程序里就 可以用on off代替0 1
使程序可读性增强
同时又用带参数宏定义来代替语句或子程序,使程序不仅看起来紧湊,而且执行效率也较高(和调用子程序相比)
使用时 LED1(on) 或 LED1(off) 即可
LED1(on) 就相当于LED1(0) 又等效于GPIO_ResetBits(GPIOB,GPIO_Pin_0)
if语句是在编译时就判断了,并不是执行时才判断


回复 支持 1 反对 0

使用道具 举报

发表于 2014-12-5 10:05:35 | 显示全部楼层
fant 发表于 2014-12-4 14:50
我知道 \ 是续行符,就是想知道 #define LED1(a)  if (a)    GPIO_SetBits(GPIOB,GPIO_Pin_0); else  GPIO_R ...

这是带参的宏定义,意思就是,“LED(a)”就相当于后面的那个句子,程序运行时会自动进行替换
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-27 10:24 , Processed in 0.030976 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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