В настоящее время я изучаю CMSIS-RTOS v2, и у меня возникла проблема, которая не позволяет мне найти нужный ответ.
Я использую дискету STM32L476-Disco и центральную кнопку джойстикакак прерывание. У меня очень простой обратный вызов прерывания для центрального прерывания джойстика:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
//osEventFlagsSet(evt_id,0x0001);
HAL_GPIO_TogglePin(LD5_GPIO_Port,LD5_Pin);
osThreadFlagsSet(ThId_Led_Blink,0x0001);
}
Когда я вызываю osThreadFlagsSet, микроконтроллер зависает и больше ничего не происходит. Вот почему я поставил HAL_GPIO_TogglePin: чтобы увидеть, отвечает ли mcu или нет.
Я знаю, что мое прерывание сбрасывается правильно, потому что, когда я только переключаю свой пин-код, я могу правильно переключать светодиод.
ThId_Led_Blink является ThreadId
osThreadId ThId_Led_Blink;
Я проверил, что идентификатор правильно установлен в моем отладчике, и он (не ноль).
Как вы можетевидите, я пытался с osEvenFlagsSet, и у меня тот же результат.
Когда я проверяю документацию CMSIS_RTOS v2, он указывает, что osThreadFlagsSet может быть вызван из ISR, но я не уверен, если мне нужнов этом случае сделайте что-нибудь еще для правильной установки флагов и решите проблему, когда ISR зависает.
Спасибо за вашу помощь