Контекст потока main() после запуска ядра

Учитывая кодовую базу, в которой у нас есть функция main(). После вызова функции запуска ядра у нас работает ОС.

Теперь в контексте какого потока выполняется фрагмент кода после вызова функции запуска ядра?

int main()
{
  /* DO SOMETHING */

  /* Start scheduler */
  osKernelStart();

  /* Infinite loop */
  while (1)
  {
    /* USER CODE  */

  }

}

В фрагменте кода укажите контекст «ПОЛЬЗОВАТЕЛЬСКИЙ КОД». Заранее спасибо.


person Ginu Jacob    schedule 13.05.2015    source источник
comment
По моему опыту работы с различными RTOS, osKernelStart() обычно не возвращается к main(). И последующий код в main() будет предназначен только для перехвата какого-то состояния ошибки. Есть ли конкретная RTOS, о которой вы спрашиваете?   -  person kkrambo    schedule 13.05.2015
comment
Я бы использовал freeRTOS .. У меня возникли сомнения, увидев демонстрационный код   -  person Ginu Jacob    schedule 13.05.2015


Ответы (1)


Для RTOS типично, что функция, которая запускает ядро ​​или планировщик, не возвращается к основному до тех пор, пока не произойдет ошибка. Для FreeRTOS vTaskStartScheduler() не возвращает значение, если не хватает оперативной памяти. Для uC/OS-III OSStart() не возвращается. Это всего лишь два примера.

Запуск ядра/планировщика передает управление планировщику. Затем планировщик определит задачу с наивысшим приоритетом, которая готова к запуску, и разрешит выполнение контекста этой задачи до следующей возможности для переключения контекста. Для встроенных систем планировщик обычно повторяет этот процесс вечно (т. е. до тех пор, пока не будет отключено питание). Таким образом, функция запуска RTOS никогда не возвращается.

Функция main() не является задачей и запускается только перед запуском RTOS. Обычно функция main() должна создавать одну или несколько задач перед вызовом функции запуска RTOS. Любой код в main после вызова функции запуска RTOS обычно никогда не будет выполняться, если только при запуске RTOS не возникнет ошибка.

person kkrambo    schedule 13.05.2015