Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38736
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2022-05-02 01:54
文章分类

全部博文(27)

文章存档

2022年(27)

我的朋友

分类: 嵌入式

2022-05-03 15:26:30

用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这个关键词只是在预处理阶段进行了一个简单的宏替换,而不进行语法检查,所以才会导致上面的问题。只要把宏定义后面的分号去掉就行了。

阅读(1745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~