内核启动后 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 时出现错误。
考虑一个我们有 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 时出现错误。