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 |