В сгенерированном коде STM32 CubeMX на что ссылается ADC_IRQn в комментариях раздела кода пользователя? - PullRequest
1 голос
/ 20 июня 2019

Внутри файла [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 */
}

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

1 Ответ

0 голосов
/ 20 июня 2019

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

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

...