【读书笔记】usOS-II学习笔记(2008-11-1)

本文介绍了μC/OS-II操作系统中任务的状态转换机制,包括睡眠态、就绪态、运行态、等待态和中断服务态,并详细讲解了任务控制块TCB的管理方式,如任务块数组定义、空闲任务块单向链表的创建及非空闲任务控制块双向链表的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2008-11-1

ucos-II的任务状态

l 睡眠态(Dormant):指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。把任务交给μC/OS-Ⅱ是通过调用下述两个函数之一:OSTaskCreate()OSTaskCreateExt()。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。

l 就绪态:当任务一旦建立,这个任务就进入就绪态准备运行。

l 运行态:调用OSStart()可以启动多任务。OSStart()函数运行进入就绪态的优先级最高的任务。就绪的任务只有当所有优先级高于这个任务的任务转为等待状态,或者是被删除了,才能进入运行态。

l 等待状态:正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()OSTimeDlyHMSM()。这个任务于是进入等待状态。正在运行的任务期待某一事件的发生时也要等待,手段是调用以下几个函数之一:OSFlagPend()OSSemPend()OSMutexPend()、OSMboxPend(),或OSQPend()。如果某事件未发生,调用后任务进入了等待状态(WAITING)。

l 中断服务态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。被中断了的任务就进入了中断服务态(ISR)。

任务控制块TCB的管理

1、任务块数组定义

OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASKS];/*TableofTCBs */

应用程序中可以有的最多任务数(OS_MAX_TASKS)是在文件OS_CFG.H中定义的。这个最多任务数也是μC/OS-Ⅱ分配给用户程序的最多任务控制块OS_TCBs的数目。将OS_MAX_TASKS的数目设置为用户应用程序实际需要的任务数可以减小RAM的需求量。所有的任务控制块OS_TCBs都是放在任务控制块列表数组OSTCBTbl[]中的。请注意,μC/OS-Ⅱ分配给系统任务OS_N_SYS_TASKS若干个任务控制块,见文件μC/OS-.H,供其内部使用。目前,一个用于空闲任务,另一个用于任务统计(如果OS_TASK_STAT_EN是设为1的)。

2、空闲任务块单向链表的创建

(空任务控制块指针:OSTCBFreeList

OS_EXT OS_TCB * OSTCBFreeList; /* Pointer to list of free TCBs */

在μC/OS-Ⅱ初始化的时候,如图3.2所示,所有任务控制块OS_TCBs被链接成单向空任务链表(OS_core.c: OS_InitTCBList()函数完成)。当任务一旦建立,空任务控制块指针OSTCBFreeList指向的任务控制块便赋给了该任务,然后OSTCBFreeList的值调整为指向下链表中下一个空的任务控制块。一旦任务被删除,任务控制块就还给空任务链表。

3、非空闲任务控制块双向链表

OS_EXT OS_TCB *OSTCBList; /* Pointer to doubly linked list of TCBs */

.OSTCBNext.OSTCBPrev用于任务控制块OS_TCBs的双重链接。每个任务的任务控制块OS_TCB在任务建立的时候被链接到链表中,在任务删除的时候从链表中被删除。双重连接的链表使得任一成员都能被快速插入或删除。该链表在时钟节拍函数OSTimeTick()中使用,用于刷新各个任务的任务延迟变量.OSTCBDly
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值