【问题标题】:Thread Context of main() after Kernel start内核启动后main()的线程上下文
【发布时间】:2015-07-24 14:47:09
【问题描述】:

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

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

int main()
{
  /* DO SOMETHING */

  /* Start scheduler */
  osKernelStart();

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

  }

}

在给出的代码sn-p中,“USER CODE”的上下文是什么 提前致谢

【问题讨论】:

  • 根据我使用各种 RTOS 的经验,osKernelStart() 通常不会返回到 main()。之后 main() 中的代码仅用于捕获某种错误条件。您问的是特定的 RTOS 吗?
  • 我会使用 freeRTOS .. 看到演示代码有疑问

标签: kernel main scheduler rtos


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2019-12-16
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多