hahake 发表于 2010-9-20 17:58:56

ucos 就绪表问题

在ucos 2.52版中 任务优先级插入到就绪表所用代码如下:
      ptcb->OSTCBY         = prio >> 3;                  /* Pre-compute X, Y, BitX and BitY          */
      ptcb->OSTCBBitY      = OSMapTbl;
      ptcb->OSTCBX         = prio & 0x07;
      ptcb->OSTCBBitX      = OSMapTbl;


      OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
      OSRdyTbl |= ptcb->OSTCBBitX;
在ucos 2.84版中 代码改为:(64个任务以下)
      ptcb->OSTCBY         = (INT8U)(prio >> 3);         /* Pre-compute X, Y, BitX and BitY          */
      ptcb->OSTCBBitY      = (INT8U)(1 << ptcb->OSTCBY);
      ptcb->OSTCBX         = (INT8U)(prio & 0x07);
      ptcb->OSTCBBitX      = (INT8U)(1 << ptcb->OSTCBX);

      OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
      OSRdyTbl |= ptcb->OSTCBBitX;
这两个代码一致么?

John_Lee 发表于 2010-9-21 02:30:53

手上没有 2.52 版的,但如果 OSMapTbl 是 { 1, 2, 4, 8, 16, 32, 64, 128 }, 就是一致的。

jzhang123 发表于 2013-10-29 16:30:03

2楼正解
页: [1]
查看完整版本: ucos 就绪表问题