打印

关于固件库点亮LED例程的一点疑问

[复制链接]
562|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2020-4-2 13:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bsd_led.h头文件中的宏定义
/* 直接操作寄存器的方法控制IO */
#define        digitalHi(p,i)                 {p->BSRR=i;}         //输出为高电平               
#define     digitalLo(p,i)                 {p->BRR=i;}         //输出低电平
#define     digitalToggle(p,i)         {p->ODR ^=i;} //输出反转状态


里面的语句都带有大括号,而且大括号里语句的结束已经有分号了,按照C语言直接替换的规则,是不是连分号和大括号都一起替换?如果是这样调用语句
while (1)
        {
                LED1_ON;                          // 亮
                SOFT_DELAY;
                LED1_OFF;                   // 灭

         }
替换后是不是这样
while (1)
        {
                {GPIOB->BRR=GPIO_Pin_5;};                          // 亮
                SOFT_DELAY;
                {GPIOB->BSRR=GPIO_Pin_5;};                   // 灭

         }
这里的分号和大括号是不是多余?但编译运行都是正常的,是我理解的有错吗?宏定义一般要求不加分号?这里的操作有点看不懂,道行太浅
希望各位大神给予指点,谢谢1

使用特权

评论回复

相关帖子

沙发
ningling_21| | 2020-4-2 17:10 | 只看该作者
本帖最后由 ningling_21 于 2020-4-2 18:39 编辑

分号不多余,宏定义加分号没问题

使用特权

评论回复
板凳
光轮TreeOS| | 2020-4-3 09:37 | 只看该作者
期待解答中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

463

帖子

1

粉丝