微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 IAR IDE 和 STM32 控制器编写 switch 语句

如何解决如何使用 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_typeOUTPUT_ODINPUT_FLOATING 之一,而不是宏值的按位 OR 吗?

使用宏值,它实际上不会导致失败,但从语义上讲,代码并不具有您最有可能想要的含义,这会使未来的维护者感到困惑或困惑,并且在其他情况下可能会失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。