在Cube MX生成的[devicename] _it.c文件中,每个IRQ处理程序中都有多个用户代码段,例如下面的ADC_IRQHandler
void ADC_IRQHandler(void)
{
/* USER CODE BEGIN ADC_IRQn 0 */
/* USER CODE END ADC_IRQn 0 */
/* USER CODE BEGIN ADC_IRQn 1 */
/* USER CODE END ADC_IRQn 1 */
}
多个部分的目的是什么?
答案 0 :(得分:0)
如果您在CubeMX中打勾选项以生成对HAL ADC处理程序的调用,并重新生成代码,则会将该调用放在两个用户代码部分之间的HAL_ADC_IRQHandler()
处。您可以在HAL内容之前和之后都有用户代码。
但是,我发现用IRQHandler
函数中的HAL代码和用户代码来处理中断是一个糟糕的主意,因为这通常意味着两次读取寄存器,这可能会产生一些不良的副作用。如果调用了HAL处理程序,则最好将用户代码放在适当的回调函数中,该函数将在HAL发现中断原因时调用。