typedrf struct os_tcb {

通常,操作系统会将当前所有任务控制块组成一个双向的链表OSTCBList,这个链表将在函数OSTimeTick中被用到。
OSTimeTick函数是系统的时钟处理函数,他负责系统各任务的延时工作,一般情况下,OSTimeTick会被周期性的调用,其本质是操作上面所说的OSTCBList,它遍历链表中的每一个任务控制块的OSTCBDly字段,并将需要延时的任务的OSTCBDly值减1,当某人物的该字段值减为0时,这个任务就会在就绪表中被标记,任务结束等待进入就绪状态。
每个任务创建时,都会被加入链表OSTCBList中,在任务被删除时,相应控制块也会在链表中清除。

OS_STK *OSTCBStkPtr; //任务堆栈栈顶指针

struct os_tcb *OSTCBNext; //指向后一个任务控制块

stryct os_tcb *OSTCBPrev; //指向前一个任务控制块

OSTCBEventPtr用来指向当前和任务密切相关的事件控制块,所谓密切相关,即任务阻塞在该事件上。在ucosII中,所有的任务同步与通信机制,包括信号量、邮箱、消息队列等都是通过事件控制块来描述,当任务请求同步或通信服务,并阻塞在相应事件上,OSTCBEventPtr字段就记录了这个事件对应的事件控制块.
OS_EVENT *OSTCBEventPtr; //指向与任务当前事件相关的事件控制块

OSTCBMsg字段在任务中使用邮箱或消息队列传输数据时被使用,该字段用于记录其他任务传递个本任务的数据的地址(即数据指针)。
void *OSTCBMsg; //用于指向从邮箱或队列中接收到的消息

INT16U OSTCBDly; //用于任务等待延时,记录要等待的时钟滴答数。

INT8U OSYCBStat; //任务当前状态

任务状态 对应值 描述
OS_STAT_RDY 0x00 任务就绪状态
OS_STAT_SEM 0x01 任务等待信号量状态
OS_STAT_MBOX 0x02 任务处于等待邮箱消息状态
OS_STAT_Q 0x04 任务处于等待消息队列状态
OS_STAT_SUSPEND 0x08 任务处于被挂起状态
OS_STAT_MUTEX 0x10 任务处于等待互斥信号量状态
OS_STAT_FLAG 0x20 任务处于等待事件标志组状态

INT8U OSTCBPrio; //任务的优先级,值越小优先级越高。
//OS_CFG.H中的OS_MAX_TASKS定义最多用户使用控制块个数。这些任务控制块被放在OSTCBbl数组。

//以下四个字段与任务的优先级联系密切,用于加速任务的切换过程
INT8U OSTCBX; //该优先级在全局数组OSRdyTbl[]中对应的位置
INT8U OSTCBY; //该优先级在全局变量OSRdyGrp中对应位置
INT8U OSTCBBitX; //与OSTCBX值相对应的位掩码
INT8U OSTCBBitY; //与OSTCBY值相对应的位掩码
}OS_TCB;

任务控制块os_tcb

相关文章:

  • 2021-05-06
  • 2022-12-23
  • 2022-02-07
  • 2022-02-20
  • 2021-10-02
  • 2022-12-23
  • 2021-07-26
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-25
  • 2022-12-23
  • 2021-07-21
  • 2021-11-11
  • 2022-02-23
  • 2022-12-23
相关资源
相似解决方案