keil5 if else 问题

现象:keil 5 仿真时候,if和else执行的内容会一直触发;如下

void IN_task(void)
{
	if(HAL_GPIO_ReadPin(MCU_Sing1_GPIO_Port,MCU_Sing1_Pin)  == GPIO_PIN_RESET)	
	{
		P1_flag |= 0x02;
	}
	else
	{
		P1_flag &= 0xFD;
	}
	if(HAL_GPIO_ReadPin(MCU_Sing2_GPIO_Port,MCU_Sing2_Pin)  == GPIO_PIN_RESET)	//if和else执行的内容会一直触发
	{
		P1_flag &= 0xFE;
	}
	else 
	{
		P1_flag |= 0x01;
	}
}

解决方案一: 代码修改为一下格式

void IN_task(void)
{
	if(HAL_GPIO_ReadPin(MCU_Sing1_GPIO_Port,MCU_Sing1_Pin)  == GPIO_PIN_RESET)	
	{
		P1_flag |= 0x02;
	}
	else if(HAL_GPIO_ReadPin(MCU_Sing1_GPIO_Port,MCU_Sing1_Pin)  == GPIO_PIN_SET)
	{
		P1_flag &= 0xFD;
	}
	if(HAL_GPIO_ReadPin(MCU_Sing2_GPIO_Port,MCU_Sing2_Pin)  == GPIO_PIN_RESET)	
	{
		P1_flag &= 0xFE;
	}
	else if(HAL_GPIO_ReadPin(MCU_Sing2_GPIO_Port,MCU_Sing2_Pin)  == GPIO_PIN_SET)
	{
		P1_flag |= 0x01;
	}
}

解决方案二:
在Options for Target Optimization(优化) 选择level 0 或者 default
keil5 if else 问题_第1张图片

你可能感兴趣的:(C语言程序设计,STM32)