15762289801 发表于 2013-6-4 19:57:46

μC/OS-II OSStart()和起始任务谁先运行?

代码示意如下:
main()
{
    OSInit():
    ...
    OSTaskCreateExt(APPTaskStart,...);
    ...
    OSStart();
}
APPTaskStart()
{
    ...
    OSTaskCreateExt(...);
    while(1)
   {
   ...
   }
}
请教各位,在main()函数创建其实任务的时候会去运行APPTaskStart()吗?也就是说APPTaskStart()先于系统启动。

Eric2013 发表于 2013-6-4 20:27:08

不会啊,那时候OSRUNING是false, 不会启动调度

eduhf_123 发表于 2013-6-4 20:28:27

不会,在OSStart建立多任务运行环境前,OSTaskCreateExt函数只会把任务添加到就绪队列中去、而不会进行任务调度。

你只要保证调用OSStart前别开中断、别主动调用任务调度函数,就可以保证直到OSStart结束的地方才进入多任务环境、才运行就绪队列中优先级最高的任务。

注意:OSStart系统调用永不返回!(在μC/OS-Ⅱ2.52之前是这样的,之后的版本我不了解)

eduhf_123 发表于 2013-6-4 20:30:02

Eric2013 发表于 2013-6-4 20:27 static/image/common/back.gif
不会啊,那时候OSRUNING是false, 不会启动调度

看了1楼的回复才知道还有个“OSRUMING”的Flag,时间过去太久、都已经不太记得了。

shij520163 发表于 2013-6-6 09:48:59

创建APPTaskStart()的时候不会执行该任务,只有运行OSStart()后才会运行APPTaskStart()。uC/OS在OSStart()之前必须至少建立一个任务(除空闲任务和统计任务之外)
页: [1]
查看完整版本: μC/OS-II OSStart()和起始任务谁先运行?