В сгенерированном коде STM32 CubeMX на что указывает ADC_IRQn в комментариях раздела кода пользователя?

Внутри файла [devicename] _it.c, сгенерированного Cube MX, есть несколько разделов пользовательского кода внутри каждого обработчика 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 */
}

какова цель нескольких разделов?


person norlesh    schedule 20.06.2019    source источник


Ответы (1)


Если вы отметите опцию в CubeMX для генерации вызова обработчика HAL ADC и регенерируете код, он поместит вызов HAL_ADC_IRQHandler() между двумя разделами кода пользователя. У вас может быть код пользователя как до, так и после HAL.

Однако я считаю плохой идеей обрабатывать прерывания как кодом HAL, так и кодом пользователя в функции IRQHandler, потому что это обычно означает чтение регистров дважды, что может иметь некоторые нежелательные побочные эффекты. Если вызывается обработчик HAL, то было бы лучше поместить пользовательский код в соответствующую функцию обратного вызова, которая будет вызываться, когда HAL обнаружит причину прерывания.

person followed Monica to Codidact    schedule 20.06.2019