考虑我们有一个main()的代码库。在调用内核启动函数后,我们运行了操作系统。
现在在内核启动函数调用运行后哪个线程执行代码片段的上下文中?
int main()
{
/* DO SOMETHING */
/* Start scheduler */
osKernelStart();
/* Infinite loop */
while (1)
{
/* USER CODE */
}
}
在给定代码段中,“USER CODE”的上下文是什么 在此先感谢
答案 0 :(得分:2)
对于RTOS,除非发生错误,否则启动内核或调度程序的函数不会返回main。对于FreeRTOS,除非RAM不足,否则vTaskStartScheduler()不会返回。对于uC / OS-III,OSStart()不会返回。这只是两个例子。
启动内核/调度程序可以控制调度程序。然后,调度程序将确定准备运行的最高优先级任务,并允许该任务的上下文运行直到上下文切换的下一个机会。对于嵌入式系统,调度器通常永久地重复该过程(即,直到移除电源)。所以RTOS Start函数永远不会返回。
main()函数不是任务,只在RTOS启动之前运行。通常,main()应该在调用RTOS启动函数之前创建一个或多个任务。调用RTOS启动函数后,main中的任何代码通常都不会执行,除非启动RTOS时出错。