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

Thread Context of main() after Kernel start

考虑一个我们有 main() 的代码库。调用内核启动函数后,我们得到了OS运行。

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

int main()
{
  /* DO SOMETHING */

  /* Start scheduler */
  osKernelStart();

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

  }

}

在给出的代码片段中,"USER CODE"的上下文是什么 提前致谢

对于 RTOS,启动内核或调度程序的函数通常不会 return 到 main,除非发生错误。对于 FreeRTOS,vTaskStartScheduler() does not return unless there is insufficient RAM. For uC/OS-III, OSStart() 不会 return。这只是两个例子。

启动 Kernel/Scheduler 使调度程序处于控制之中。然后,调度程序将确定准备好 运行 的最高优先级任务,并允许该任务的上下文 运行 直到下一次上下文切换机会。对于嵌入式系统,调度程序通常会永远重复此过程(即,直到电源被移除)。所以 RTOS Start 函数永远不会 returns.

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