我正在为我的AVR ATmega32微控制器编写一个"gpio"设备驱动程序.驱动程序具有初始化功能,如下所示.我使用枚举将配置传递给函数.调用此函数的一个示例是
gpio_init_port(MY_PORT_A, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)
这会将PORTA设置为输入,默认值为HIGH.我使用switch语句来检查传递的配置,以将相应的端口设置为输入或输出.现在我想在用户输入错误输入的情况下在switch语句的"default"情况下使用#error preprocessor指令,例如
gpio_init_port(5, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)
因此编译停止并打印错误消息.但我不知道为什么它没有按照我的预期运作.我所指的代码部分是这样的:
default:
#if (port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)
表达方式
(port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
Run Code Online (Sandbox Code Playgroud)
不评估,并且不打印错误消息.但是当我改变它
#if (1)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)
它工作正常.我的另一个问题是当我写一些类似的东西时
gpio_init_port(5, ***OUTPUT***, HIGH);
Run Code Online (Sandbox Code Playgroud)
虽然我这次传递"OUTPUT",但也会打印错误消息,这不应该发生,因为默认情况仅针对"INPUT"情况定义.
gpio.h
______
typedef enum port_number{
MY_PORT_A=0,
MY_PORT_B,
MY_PORT_C,
MY_PORT_D
} port_number_t;
typedef …Run Code Online (Sandbox Code Playgroud)