那么请问,task2和task3在创建的时候,有没有运行呢?仅仅是创建没有运行么?
8 个解决方案
#1
我也是初学
迷惑
task1和task2 task3竞争一个资源么?
迷惑
task1和task2 task3竞争一个资源么?
#2
楼上的,求人不如求己.我经过一个下午的试验,终于完全彻底搞清楚了任务的调度,
你要是有疑问的话,加我的qq15172470.或者msn:sirlipeng@msn.com
我很乐意给你解答
你要是有疑问的话,加我的qq15172470.或者msn:sirlipeng@msn.com
我很乐意给你解答
#3
ucos可以看看代码了解实现
#4
是这样的,其实大部分时间,cpu运行的是Idle,你的Task应该占用很少的CPU资源。
你的Task里面一旦不需要再占用cpu,你就应该释放资源,调用OSXxxPend或者OSTimeDly等释放CPU
也就是说你的无限循环内部必须释放CPU(调用系统函数OSXxxPend或者OSTimeDly等)不然优先级低的Task永远无法运行,记着一旦你的Task不需要CPU应立即释放,当然满足一定的条件(超时,事件被激活等等)Task用会继续运行。
你的Task里面一旦不需要再占用cpu,你就应该释放资源,调用OSXxxPend或者OSTimeDly等释放CPU
也就是说你的无限循环内部必须释放CPU(调用系统函数OSXxxPend或者OSTimeDly等)不然优先级低的Task永远无法运行,记着一旦你的Task不需要CPU应立即释放,当然满足一定的条件(超时,事件被激活等等)Task用会继续运行。
#5
其实可以自己看代码,就看任务调度部分就会明白了
#6
在us/os-II中,如果我创建了一个任务task1(优先级0),然后我在task1中又创建两个任务task2(优先级1)和task3(优先级2),然后,task1进入一个无限循环.
那么请问,task2和task3在创建的时候,有没有运行呢?仅仅是创建没有运行么?
任务的创建只是把该任务放到就绪队列里,如果并没有被调度是不会执行的。
us/os-II采用抢占式基于优先级的调度算法,总共有0-63个优先级,数值越小
优先级越高。
因为你的task1的优先级是0 ,高于task2,task3.
所以如果task1不把自己挂起(使自己挂起的方法有:延迟1段时间,直接把自己挂起,等待某种资源)
task1是一直占用cpu的(即使有中断发生,中断返回后仍然继续执行task1).
那么请问,task2和task3在创建的时候,有没有运行呢?仅仅是创建没有运行么?
任务的创建只是把该任务放到就绪队列里,如果并没有被调度是不会执行的。
us/os-II采用抢占式基于优先级的调度算法,总共有0-63个优先级,数值越小
优先级越高。
因为你的task1的优先级是0 ,高于task2,task3.
所以如果task1不把自己挂起(使自己挂起的方法有:延迟1段时间,直接把自己挂起,等待某种资源)
task1是一直占用cpu的(即使有中断发生,中断返回后仍然继续执行task1).
#7
楼上说得有理,其实任务创建时,只是初始化了它的任务栈以及其它一些相关参数,然后把它放进任务就绪队列,但它并没有得到cpu,除非其优先级最高。这里task2,task3优先级低于task1,那么如果task1中如果没有使自己挂起,那么任务2和任务3将永远得不到运行。
#8
关键看“无限循环”里面干了些什么,呵呵~~
#1
我也是初学
迷惑
task1和task2 task3竞争一个资源么?
迷惑
task1和task2 task3竞争一个资源么?
#2
楼上的,求人不如求己.我经过一个下午的试验,终于完全彻底搞清楚了任务的调度,
你要是有疑问的话,加我的qq15172470.或者msn:sirlipeng@msn.com
我很乐意给你解答
你要是有疑问的话,加我的qq15172470.或者msn:sirlipeng@msn.com
我很乐意给你解答
#3
ucos可以看看代码了解实现
#4
是这样的,其实大部分时间,cpu运行的是Idle,你的Task应该占用很少的CPU资源。
你的Task里面一旦不需要再占用cpu,你就应该释放资源,调用OSXxxPend或者OSTimeDly等释放CPU
也就是说你的无限循环内部必须释放CPU(调用系统函数OSXxxPend或者OSTimeDly等)不然优先级低的Task永远无法运行,记着一旦你的Task不需要CPU应立即释放,当然满足一定的条件(超时,事件被激活等等)Task用会继续运行。
你的Task里面一旦不需要再占用cpu,你就应该释放资源,调用OSXxxPend或者OSTimeDly等释放CPU
也就是说你的无限循环内部必须释放CPU(调用系统函数OSXxxPend或者OSTimeDly等)不然优先级低的Task永远无法运行,记着一旦你的Task不需要CPU应立即释放,当然满足一定的条件(超时,事件被激活等等)Task用会继续运行。
#5
其实可以自己看代码,就看任务调度部分就会明白了
#6
在us/os-II中,如果我创建了一个任务task1(优先级0),然后我在task1中又创建两个任务task2(优先级1)和task3(优先级2),然后,task1进入一个无限循环.
那么请问,task2和task3在创建的时候,有没有运行呢?仅仅是创建没有运行么?
任务的创建只是把该任务放到就绪队列里,如果并没有被调度是不会执行的。
us/os-II采用抢占式基于优先级的调度算法,总共有0-63个优先级,数值越小
优先级越高。
因为你的task1的优先级是0 ,高于task2,task3.
所以如果task1不把自己挂起(使自己挂起的方法有:延迟1段时间,直接把自己挂起,等待某种资源)
task1是一直占用cpu的(即使有中断发生,中断返回后仍然继续执行task1).
那么请问,task2和task3在创建的时候,有没有运行呢?仅仅是创建没有运行么?
任务的创建只是把该任务放到就绪队列里,如果并没有被调度是不会执行的。
us/os-II采用抢占式基于优先级的调度算法,总共有0-63个优先级,数值越小
优先级越高。
因为你的task1的优先级是0 ,高于task2,task3.
所以如果task1不把自己挂起(使自己挂起的方法有:延迟1段时间,直接把自己挂起,等待某种资源)
task1是一直占用cpu的(即使有中断发生,中断返回后仍然继续执行task1).
#7
楼上说得有理,其实任务创建时,只是初始化了它的任务栈以及其它一些相关参数,然后把它放进任务就绪队列,但它并没有得到cpu,除非其优先级最高。这里task2,task3优先级低于task1,那么如果task1中如果没有使自己挂起,那么任务2和任务3将永远得不到运行。
#8
关键看“无限循环”里面干了些什么,呵呵~~