|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-3-31 13:07:42
|
显示全部楼层
littleGnss 发表于 2012-3-31 11:12 ![](static/image/common/back.gif)
谢谢你的回复,我知道这个判断是运行的,但是在运行 OSTCBList = ptcb; 这句话时, ptcb->OSTCBPrev会 ...
OSTCBList->OSTCBPrev = ptcb;是将以前的队首TCB,就是上次创建(注意不是本次)的任务的TCB,因为本TCB的插入而失去的队首的位置,因此要指向本次创建任务的TCB即ptcb
然后,
运行OSTCBList = ptcb;是因为当前创建的任务的控制块应该在TCB链表之首,所以将OSTCBList指向当前的TCB就是ptcb,当然,队列最前面的TCB前指针永远指向0的。
因此,ptcb->OSTCBPrev会赋值给OSTCBList ->OSTCBPrev的理解是不对的
我觉得您主要是还没有理清整个的TCB两个链表的细节构建,这个是标准的双向链表代码,非常的标准!
所以我在书中把0个、1个、2个任务的空闲链表和就绪链表的图示给出,以方便学习,您的图给出的很好,但都是没有问题的。
我建议将链表的构建在调试过程中画一下,就会很清楚很清楚,呵呵![](static/image/smiley/default/handshake.gif)
谢谢您一大早就研究这个问题,必然会成功的!
卢有亮 2012/3/31
|
|