uC/OS-II常用数据量定义

来源:互联网 发布:移动网络电视怎么样 编辑:程序博客网 时间:2024/06/08 04:26

比较重要的几个量(MAX_TASKS表示最大任务个数,LOWEST_PRIO指最低优先级数):
OSRunning:用于标识多任务环境是否已经开启运行,在OSStart()函数里启动任务后就置为True。

OSIntNesting:用于标识中断嵌套层数。产生一次中断可以调用OSIntEnter()函数使该值自增1,处理完一次中断再调用OSIntExit()自减1。

OS_TCB:一个结构体变量,每建立一个任务都会为该任务指定一个OS_TCB,包含该任务的栈顶指针,任务优先级,任务状态字,延时节拍等所有相关信息。每个任务的OS_TCB都存在于一个双向链表内,并使变量OSTCBList指向最后建立的那个任务的OS_TCB。

OS_STK:任务堆栈,每个任务都有一个自己的堆栈空间,用于保存寄存器,状态值,和任务的入口地址。这个堆栈与系统栈没有什么关系,只是用户为一个任务分配的存储任务信息的空间,只需要是一个连续的存储空间即可。

OSRdyGrp,OSRdyTbl[
]用于标识就绪的任务。uC/OS根据优先级唯一确定一个任务,也即一个优先级只能分配给一个任务。OSRdyTbl[ ]里保存(MAX_TASKS/8+1)个字节,每个字节又有8个Bit,从最低位开始分别对应0~LOWEST_PRIO优先级的任务,任务就绪时就将该任务的优先级所在Bit置1,否则清0。
OSRdyGrp完全是为了找到最高优先级方便而设立的,将OSRdyTbl[ ]里每个字节代表的8个任务划为一个组,只要某一组内有就绪任务时,OSRdyGrp的相应位就置1。比如,只要OSRdyTbl[0]不为0,则OSRdyGrp的第0位就置1,依次类推。

OSPrioCur
:这是一个整型数,表示当前执行任务的优先级数。

OSPrioHighRdy:一个整型数,表示当前最高级别的就绪任务的优先级数。

OSTCBHighRdy:这是一个指针,它指向最高优先级就绪任务的OS_TCB。

OSTCBCur:一个指针,指向当前执行任务的OS_TCB。

OSTCBTbl[ ]初始化时建立的一块存储空间,一共建立了MAX_TASKS个OS_TCB空间。并令变量OSTCBFreeList总是指向下一个可用的OS_TCB空间。当新建立一个任务时,就将一个空的OS_TCB空间分配给它使用。

OSTCBPrioTbl[
]这是一个指针数组,用于保存就绪任务的OS_TCB地址,一共有MAX_TASKS个值,依次对应0~LOWEST_PRIO优先级的任务。当某一优先级未分配给一个任务时,该数组对应元素的值为(void *)0,当某优先级的任务分配给一个处于就绪态的任务时,对应元素的内容就被写入该任务的OS_TCB所在地址。