608
社区成员




#define DS1_kjiHIGH { GPIO_Init_out( LL_GPIO_PIN_2); //GPIO(PIN脚,输出)
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(26): error: #79: expected a type specifier
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(26): error: #79: expected a type specifier
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(26): error: #260-D: explicit type is missing ("int" assumed)
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(26): error: #147: declaration is incompatible with "void LL_GPIO_SetOutputPin(GPIO_TypeDef *, uint32_t)" (declared at line 1020 of "..\Drivers\PY32F0xx_HAL_Driver\Inc\py32f0xx_ll_gpio.h")
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(26): error: #169: expected a declaration
LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2); } //输出高电平
..\Inc\Control.h(41): warning: #12-D: parsing restarts here after previous syntax error
这个需要怎么处理?
你在宏定义中遇到了一些语法错误,导致编译器无法正确解析你的代码。以下是一些可能的问题和解决方案:
{}
可能导致编译器无法正确解析。\
**:如果宏定义包含多行语句,需要使用反斜杠 \
来连接这些行。你可以通过以下方式修改你的宏定义:
使用反斜杠 \
连接多行语句:
#define DS1_kjiHIGH do { \
GPIO_Init_out(LL_GPIO_PIN_2); /* GPIO(PIN脚,输出) */ \
LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); /* 输出高电平 */ \
} while(0)
**避免在宏定义中使用 {}
**:
如果你的宏定义只有一行,可以直接定义成一行:
#define DS1_kjiHIGH ( \
GPIO_Init_out(LL_GPIO_PIN_2), /* GPIO(PIN脚,输出) */ \
LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2) /* 输出高电平 */ \
)
以下是一个完整的宏定义示例,使用了 do-while
结构以确保宏在使用时的正确性:
#define DS1_kjiHIGH do { \
GPIO_Init_out(LL_GPIO_PIN_2); /* GPIO(PIN脚,输出) */ \
LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); /* 输出高电平 */ \
} while(0)
do { ... } while(0)
**:这种方式确保宏在任何地方都能正确使用,避免因为语句末尾的分号或其它原因导致的语法错误。\
**:用来将宏定义分成多行,以提高可读性。GPIO_Init_out
和 LL_GPIO_SetOutputPin
函数的声明和定义正确。py32f0xx_ll_gpio.h
。通过以上修改,你应该能够解决编译器错误,并正确定义和使用你的宏。
void LL_GPIO_SetOutputPin(GPIO_TypeDef *, uint32_t) 是此函数的原始声明。错误提示是:在参数传递声明中使用了泛化传递,调用时需要提供一个类型说明。但是,可能存在其他问题,那两个参数应该是预设的值,正常情况下不应该出问题。应该查一下两个预设值的原始定义,或许需要信息加强。
66666666