内核启动后main()的线程上下文

时间:2015-05-13 10:52:08

标签: kernel main scheduler rtos

考虑我们有一个main()的代码库。在调用内核启动函数后,我们运行了操作系统。

现在在内核启动函数调用运行后哪个线程执行代码片段的上下文中?

int main()
{
  /* DO SOMETHING */

  /* Start scheduler */
  osKernelStart();

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

  }

}

在给定代码段中,“USER CODE”的上下文是什么 在此先感谢

1 个答案:

答案 0 :(得分:2)

对于RTOS,除非发生错误,否则启动内核或调度程序的函数不会返回main。对于FreeRTOS,除非RAM不足,否则vTaskStartScheduler()不会返回。对于uC / OS-III,OSStart()不会返回。这只是两个例子。

启动内核/调度程序可以控制调度程序。然后,调度程序将确定准备运行的最高优先级任务,并允许该任务的上下文运行直到上下文切换的下一个机会。对于嵌入式系统,调度器通常永久地重复该过程(即,直到移除电源)。所以RTOS Start函数永远不会返回。

main()函数不是任务,只在RTOS启动之前运行。通常,main()应该在调用RTOS启动函数之前创建一个或多个任务。调用RTOS启动函数后,main中的任何代码通常都不会执行,除非启动RTOS时出错。