我编写了程序,该程序使用两个按钮和外部中断来打开每个LED。我想通过优先级使用抢占式调度。但我使用的HAL程序仅运行尾链中断mod。有没有办法实现抢占式调度?
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1) {
if(flag_Sw1 == 1) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
flag_Sw1=0;
HAL_Delay(200);
} else if (flag_Sw2 == 1) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
flag_Sw2=0;
HAL_Delay(200);
}
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
}
}
.
.
.
// in the MX_GPIO_Init(void)
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
.
.
.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN) {
if(GPIO_PIN == GPIO_PIN_8) {
flag_Sw1 = 1;
flag_Sw2 = 0;
}
else if(GPIO_PIN == GPIO_PIN_13) {
flag_Sw1 = 0;
flag_Sw2 = 1;
}
}
答案 0 :(得分:0)
如果您看到的是尾链而不是抢占,则可能未按预期配置NVIC优先级分组-因此将两个中断配置为优先级组0和1不会对中断抢占产生影响。
答案 1 :(得分:0)
最简单的方法是使用STM CUBE支持的freeROS。编写调度程序只是工作的一部分。您还需要同步机制