如何解决如何使用 IAR IDE 和 STM32 控制器编写 switch 语句
我是嵌入式 C 编程的新手,正在研究 STM32F10x 设备的 HAL 驱动程序。我正在使用 IAR IDE 和 C 编译器。以下开关似乎不起作用并出现错误:
Error[Pe053]: expected a ":"
和
Error[Pe065]: expected a ";"
在 switch 语句的多个位置。
// header file
#define OUTPUT_GEN_PURPOSE (uint32_t) 0x00)
#define OUTPUT_OD (uint32_t) 0x01)
#define OUTPUT_ALT_FUNCTION (uint32_t) 0x02)
#define OUTPUT_ALT_FUNCTION_OD (uint32_t) 0x03)
#define INPUT_ANALOG (uint32_t) 0x00)
#define INPUT_FLOATING (uint32_t) 0x01)
#define INPUT_PU_PD (uint32_t) 0x02)
#define CNF_POS_BIT1 (PINPOS[pinNumber] + 2)
#define CNF_POS_BIT2 (PINPOS[pinNumber] + 3)
// C file
switch(mode_type)
{
// Output Modes
case OUTPUT_GEN_PURPOSE | INPUT_ANALOG:
port->CRH &= ~((1<<CNF_POS_BIT1) | (1<<CNF_POS_BIT2));
break;
case OUTPUT_OD | INPUT_FLOATING:
port->CRH &= ~(1<<CNF_POS_BIT2);
port->CRH |= (1<<CNF_POS_BIT1);
break;
case OUTPUT_ALT_FUNCTION | INPUT_PU_PD:
port->CRH |= OUTPUT_ALT_FUNCTION<<(CNF_POS_BIT1);
break;
case OUTPUT_ALT_FUNCTION_OD:
port->CRH |= OUTPUT_ALT_FUNCTION_OD<<(CNF_POS_BIT1);
break;
}
请让我知道是否在 switch 语句语法等方面有任何问题。
解决方法
例如:
case OUTPUT_OD | INPUT_FLOATING:
扩展为:
case (uint32_t) 0x01) | (uint32_t) 0x01):
由于宏定义错误,括号不平衡:
#define OUTPUT_GEN_PURPOSE ((uint32_t) 0x00)
// ^
// Parenthesis
您的 case
常量的语义似乎不太可能(而且不寻常)。你真的打算:
case OUTPUT_OD :
case INPUT_FLOATING:
port->CRH &= ~(1<<CNF_POS_BIT2);
port->CRH |= (1<<CNF_POS_BIT1);
break;
意思 mode_type
是 OUTPUT_OD
或 INPUT_FLOATING
之一,而不是宏值的按位 OR 吗?
使用宏值,它实际上不会导致失败,但从语义上讲,代码并不具有您最有可能想要的含义,这会使未来的维护者感到困惑或困惑,并且在其他情况下可能会失败。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。