Как реализовать упреждающее планирование с использованием HAL в STM32F103RB - PullRequest
1 голос
/ 25 апреля 2019

Я закодировал программы, которые используют две кнопки и внешние прерывания для включения каждого светодиода. Я хотел использовать упреждающее планирование с использованием приоритета. но моя HAL-используемая программа запускает только мод Tail-Chaining Interrupt. Есть ли способ реализовать упреждающее планирование?

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;
    }
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Самый простой способ - использовать freeROS, поддерживаемый STM CUBE.Написание планировщика - это только часть работы.Вам также нужны синхронизирующие механизмы

0 голосов
/ 17 мая 2019

Если вы видите цепочку хвостов, а не вытеснение, то возможно, что приоритетная группировка NVIC настроена не так, как вы ожидаете, и, таким образом, настройка двух прерываний на группы приоритетов 0 и 1 не влияет на прерывание прерываний.

...