用Keil4编译STM32时提示:
..\HANDWARE\KEY\key.c(33): error: #18: expected a ")"
if(key_up && (KEY0==0||KEY1==0||WKUP==1))
..\HANDWARE\KEY\key.c(37): error: #18: expected a ")"
if(KEY0 == 0)
..\HANDWARE\KEY\key.c(41): error: #18: expected a ")"
else if(KEY1 == 0)
..\HANDWARE\KEY\key.c(45): error: #18: expected a ")"
else if(WKUP == 1)
..\HANDWARE\KEY\key.c(50): error: #18: expected a ")"
else if(KEY0==1&&KEY1==1&&WKUP==0)
但是程序源码:
if(key_up && (KEY0==0||KEY1==0||WKUP==1))
{
delay_ms(10);
key_up = 0;
if(KEY0 == 0)
{
return KEY0_PRESS;
}
else if(KEY1 == 0)
{
return KEY1_PRESS;
}
else if(WKUP == 1)
{
return WKUP_PRESS;
}
}
检查程序源码,完全没有问题,这就让人很疑惑了,其实仔细检查就能发现程序中调用了几个宏定义,这就去看看宏定义是否正确,检查发现宏定义是这样定义的:
#define KEY0 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5);
#define KEY1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15);
#define WKUP GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
这时因为define这个关键词只是在预处理阶段进行了一个简单的宏替换,而不进行语法检查,所以才会导致上面的问题。只要把宏定义后面的分号去掉就行了。
,
阅读(5553) | 评论(0) | 转发(1) |