关于STM32F3标准外设库中的一个语法错误

错误代码段如下

FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
{
  assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));
  
  FlagStatus bitstatus = RESET;  
  
  switch(TimerIdx)
  {
    case HRTIM_TIMERINDEX_MASTER:
    {
      if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
      {
        bitstatus = SET;
      }
      else
      {
        bitstatus = RESET;
      }
    }
    break;
    
    case HRTIM_TIMERINDEX_TIMER_A:
    case HRTIM_TIMERINDEX_TIMER_B:
    case HRTIM_TIMERINDEX_TIMER_C:
    case HRTIM_TIMERINDEX_TIMER_D:
    case HRTIM_TIMERINDEX_TIMER_E:
    {
      if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
      {
        bitstatus = SET;
      }
      else
      {
        bitstatus = RESET;
      }
    }
    break;
 
    default:
    break;  
  }    
  return bitstatus;
}

编译报错如下

..\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_hrtim.c(1139): error:  #268: declaration may not appear after executable statement in block

修改方法:需要将 FlagStatus bitstatus = RESET; 这一段代码移动至 assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));之前。

即变量的定义要在语句之前。

修改后的代码如下:

FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
{
	FlagStatus bitstatus = RESET;
	
  assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));  
  
  switch(TimerIdx)
  {
    case HRTIM_TIMERINDEX_MASTER:
    {
      if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
      {
        bitstatus = SET;
      }
      else
      {
        bitstatus = RESET;
      }
    }
    break;
    
    case HRTIM_TIMERINDEX_TIMER_A:
    case HRTIM_TIMERINDEX_TIMER_B:
    case HRTIM_TIMERINDEX_TIMER_C:
    case HRTIM_TIMERINDEX_TIMER_D:
    case HRTIM_TIMERINDEX_TIMER_E:
    {
      if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
      {
        bitstatus = SET;
      }
      else
      {
        bitstatus = RESET;
      }
    }
    break;
 
    default:
    break;  
  }    
  return bitstatus;
}

 

你可能感兴趣的:(嵌入式开发中的一千零一个坑)