我目前正在学习 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 是否仍在响应。
我知道我的中断正确重置,因为当我只拨动引脚时,我可以正确切换 LED。
ThId_Led_Blink 是一个 ThreadId
osThreadId ThId_Led_Blink;
我已经检查了我的调试器中的 ID 设置是否正确并且它是(它不为空)。
如您所见,我已经尝试过使用 osEvenFlagsSet 并且得到了相同的结果。
当我检查 CMSIS_RTOS v2 文档时,它确实指定可以从 ISR 调用 osThreadFlagsSet,但我不确定在这种情况下我是否需要做其他事情才能正确设置标志并解决 ISR 时的问题绞刑。
谢谢你的帮助