收藏 分享(赏)

uCos iii 思维导图.pdf

上传人:精品资料 文档编号:10284925 上传时间:2019-10-28 格式:PDF 页数:1 大小:441.70KB
下载 相关 举报
uCos iii    思维导图.pdf_第1页
第1页 / 共1页
亲,该文档总共1页,全部预览完了,如果喜欢就下载吧!
资源描述

1、 时间片轮转 中断服务任务 内置信号量 无限循环 。 OSSemPend OS_Pend 挂起任务 OSSched 任务切换 OSTaskSemPend 阻塞任务 , 移出就绪表 激活并进入PendSV 中断 挂起PendSV 中断最高优先级 中断中切换上下文 , 立即执行 任务TCB OS_TCB ledTCB; 任务堆栈 CPU_STK ledStk200; 执行函数 (OS_TASK_PTR ) ledtask, 优先级 (OS_PRIO) 10, 时间片长 (OS_TICK) 5, 内置消息队列 (OS_MSG_QTY ) 5u, 同优先级内- 时间片轮转 设置一个时基中断的初值 OS

2、_CPU_SysTickInit(7200); PPL - 72MHz = 0.1ms / 触发时基中断 创建任务时 , 设置时间片长 (OS_TICK) 5, 内信号量 OSTaskSemPend(); 内信号量 需创建信号量 OSSchedRoundRobinEn = DEF_TRUE; 开启轮转功能 OS_CFG_ISR_POST_DEFERRED_EN 0u 开启中断服务队列后 , 若触发时基中断 , 将消息发给中断服务任务 ( 中断服务任务 PRIO = 0 )。 发消息给 TickTask 系统时基任务 发消息给 TmrTask 系统软定时器任务 采用OSTaskSemPost 发

3、送消息 OS_CPU_SysTickHandler(); 内消息队列 *OSTaskQPend(); OS_Pend OSSched 正文切换 中 止 继续处理 收到消息 任务内部 OS_SEM Type NamePtr # TailPtr * HeadPtr * Ctr TS OS_MUTEX Type NamePtr # TailPtr * HeadPtr * OwnerTCBPtr * OwnerOriginalPrio OwnerNestingPrio TS OS_FLAG_GRP Type NamePtr # TailPtr * HeadPtr * Flags TS OS_Q Typ

4、e NamePtr # TailPtr * HeadPtr * MsgQ OS_PEND_LIST # TailPtr * HeadPtr * OS_PEND_OBJ Type NamePtr # TailPtr * HeadPtr * OS_PEND_DATA PrevPtr * NextPtr * PendObjPtr * RdyMsgPtr * RdyMsgSize RdyTS TCBPtr * RdyObjPtr * OS_MSG_Q # InPtr * OutPtr * NbrEntriesSize NbrEntriesMax OS_MSG_POOL 100 NextPtr * Nb

5、rFree NbrUsed NbrUsedMax OS_MSG NextPtr * MsgPtr * MsgTS OS_INT_Q Type NextPtr * MsgPtr * Flags OPT TS ObjPtr * MsgSize OS_MEM 区 Type AddrPtr * FreeListPtr * NbrMax 100 NbrFree 75 NamePtr BlkSize 字节 OS_TCB StkPtr * ExtPtr * NextPtr * TickNextPtr * TickPrevPtr * StkLimitPtr * PrevPtr * TickSpokePtr *

6、 NamePtr StkBasePtr TaskEntryAddr TaskEntryArg * PendDataTblPtr * PendON PendStatus TaskState Prio StkSize Opt PendDataTblEntries TS SemCtr StkUsed StkFree TickCtrPrev TickCtrMatch TickRemain TimeQuanta TimeQuantaCtr MsgPtr * MsgSize MsgQ MsgQPendTime MsgQPendTimeMax FlagsPend FlagsRdy FlagsOpt Susp

7、endCtr IntDisTimeMax SchedLockTimeMax CPUUsage CPUUsageMax CtxSwCtr CyclesDelta CyclesStart CyclesTotal CyclesTotalPrev SemPendTime SemPendTimeMax RegTbl OS_TMR Type NamePtr CallbackPtrArg * PrevPtr * Remain Dly CallbackPtr NextPtr * Period Opt State MsgSize 实例 OS_MSG NextPtr * MsgPtr * MsgTS MsgSiz

8、e OS_MSG NextPtr * MsgPtr * MsgTS MsgSize OS_MSG NextPtr * MsgPtr * MsgTS MsgSize OS_MSG DATA DATA DATA TCB TCB TCB TCB TCB TCB NextPtr * NextPtr * NextPtr * PrevPtr * PrevPtr * PrevPtr * NULL NULL OS_PEND_DATA PrevPtr * NextPtr * PendObjPtr * RdyMsgPtr * RdyMsgSize RdyTS TCBPtr * RdyObjPtr * OS_PEN

9、D_DATA PrevPtr * NextPtr * PendObjPtr * RdyMsgPtr * RdyMsgSize RdyTS TCBPtr * RdyObjPtr * NULL NULL TCB TCB PendDataTblPtr * TCB TCB PendDataTblPtr * TCB TCB PendDataTblPtr * NULL NULL OSRdyList 32 0 1 2 TailPtr * HeadPtr * # TailPtr * HeadPtr * # TailPtr * HeadPtr * # 全局变量 OSIntQInPtr* OSIntQOutPt*

10、 OSIntQOvfCtr OSIntQTaskTCB OSIntQNbrEntriesMax OSIntQTaskTimeMax # OS_INT_Q Type NextPtr * ObjPtr * OS_INT_Q Type NextPtr * ObjPtr * MsgPtr * Flags OPT TS MsgSize MsgPtr * Flags OPT TS MsgSize DATA DATA DATA OSRdyList OSPrioCur OSPrioCur TailPtr * HeadPtr * # OS_TMR Type NamePtr CallbackPtrArg * Pr

11、evPtr * Remain Dly CallbackPtr NextPtr * Period Opt State OS_TMR Type NamePtr CallbackPtrArg * PrevPtr * Remain Dly CallbackPtr NextPtr * Period Opt State DATA Function DATA Function DATA Function OS_TMR_SPOKE FirstPtr * NbrEntriesMax NbrEntries OSCfg_TmrWheel 17 二维数组 FirstPtr * Max OS_INT_Q 10 # Fi

12、rstPtr * Max # FirstPtr * 5 3 FirstPtr * Max # FirstPtr * Max # 0 1 2 3 4 NULL NULL 全局变量 OSTmrTickCtr OSTmrUpdateCtr OSTmrUpdateCnt Spoke = = OSTmrTickCtr OSCfg_TmrWheelSize Ctr 17 OS_TICK_SPOKE FirstPtr * NbrEntriesMax NbrEntries 全局变量 OSTickCtr OSTickTaskTimeMax OSTickTaskTCB OSCfg_TickWheel 17 二维数

13、组 FirstPtr * Max # FirstPtr * Max # FirstPtr * 5 3 FirstPtr * Max # FirstPtr * Max # 0 1 2 3 4 Spoke = = OSTickCtr OSCfg_TickWheelSize Ctr 17 实例 实例 实例 TCB TCB TCB TCB TCB TCB TickNextPtr * TickNextPtr * TickNextPtr * TickPrevPtr * TickPrevPtr * TickPrevPtr * NULL NULL OS_TickListInsert 添加TCB 到Wheel

14、OS_TickListRemove 删除TCB OS_TmrLink 添加TMR 到Wheel OS_TmrUnlink 删除TMR 用于TCB 挂起后 倒计时 软件定时器 March March March TickCtrMatch TickCtrMatch TickCtrMatch OS_TMR 链表 , 左边等待时间最少 每次触发 , 只需检查链表第一个 TCB 链表,左边等待时间最少 每次触发,只需检查链表第一个 加入链表时 : March = Period( 周期) + OSTmrTickCtr 无溢出 加入链表时: March = Period( 周期) + OSTmrTickCt

15、r 无溢出 全局变量 OSMemQty 区数 占用 25 块 空白 75 块 全局变量 OSPrioTbl 0 映射表 Bit Map 从Tbl 表第一个bit 开始计算有 Prio 个bit = 0,Prio 为就绪的最 高优先级 。 CPU_CntLeadZeros 计算32bit 中左边开始有多少个0 OS_PRIO.C OS_PrioInsert OS_PrioRemove OS_CORE.C OS_RdyListInsert OS_RdyListRemove 任务切换时,执行的是表中第一个可执行的TCB 任务 OSTCBHighRdyPtr = OSRdyListOSPrioHigh

16、Rdy.HeadPtr; 时基中断 OSTimeTick() ; OS_SchedRoundRobin( OSPrioCur 优先级 就 绪 表 的第一个 TCB 任务 , 检查TimeQuantaCtr-; OS_RdyListMoveHeadToTail(p_rdy _list); 重置TimeQuantaCtr = TimeQuanta 调度任务 Pend挂起的任务,移出就绪表,放入Pendlist OSPrioHighRdy = OS_PrioGetHighest(); OSSched() ; 触发PendSV 中断 32bit OS_IntQPost(); 触发0优先级中断服务 任务

17、,依次处理所有结构体中的消息 中断获得的所有信息 存放于OS_INT_Q 结构体中 挂起队列 数据块 OS 任 务 创 建 Create 自 定 义 对 象 OS_Q 中 包 含OS_MSG_Q MsgQ 供给关系 这些都是有OS 系统创建的数据 需要用户自定义的数据 OS_MSG_Q 实例 信 号 量 实例 默认=0 适用于单个任务等待消息 时基任务 OS_TickTask() ; 对 象 中 包 含OS_PEND_LIST 实 例 实例 局部变量 挂起队列 Pend_LIST While(1) 程序运行到Pend , 停止运行 OSSemPend(); 类似函数创建的 局 部 变 量 OS

18、_PEND_DATA pend_data; 停 在Pend 处 的 任 务 自 定 义 所 有 任 务TCB 和 STACK OS 任 务 创 建 Create TMR 自 定 义 系统入口:Interface 时基中断:SysTick 主流程:main 硬件中断:Interpret OS_SchedRoundRobin 激活时间片处理 OSTaskSemPost 发信号量 激活时基任务OS_TickTask(); OSTaskSemPost 发信号量 激活软定时器OS_TmrTask(); Prio 级TimeQuantaCtr =0 OS_RdyListMoveHeadToTail 挂 起

19、 的 任 务 TimeQuantaCtr 计算轮辐 轮询某段轮辐中TCB 队列 检查第一个TCB 是否到期 检查正在运行的OSPrioCur 正 在 运 行 的 : OSPrioCur 中第一个TCB 退出时基中断后 OSIntExit(); 立即调度 OS_PendListRemove (p_tcb); OS_TaskRdy (p_tcb); 到期 到期 OSTmrTickCtr 计算轮辐 同理流程 轮辐中的TCB 或OS_TMR 按定时长度顺序从表头开始依次递增 获取信息OS_IntQPost 发消息队列 激活优先级0的OS_IntQTask(); 退出时基中断后 OSIntExit();

20、 立即调度 激活 OS_IntQTask(); 轮询所有MSG OS_IntQRePost(); 具体处理MSG 对象:Obj 任务:Task 阻塞任务,任务TCB 加入 Obj 的PendList 队列 Pend 申请资源 用户创建 无资源 申请成功 Timeout 不等于0 加入到TickWheel 队列 Obj 实例 PendList 链表 附带资源 SEM 、MUT 、FLAG 、MSG 、Q 挂 起 的N 个任务TCB 组成链表 其他任务Post 提供资源 Pend等待资源 等待。 获取。 申请成功 Pend函数 系统服务 申请成功 Post 函数 系统服务 Post 函数 就绪任务

21、 OS_MEM 块/100字节 100字节 100 字节 供给 初始化:Init 中断消息:OS_INT_Q10 系统默认 消息池:OS_MSG100 OS 任务堆栈、TCB : Stack128 时基轮:OS_TICK_SPOKE17 TMR 轮:OS_TMR_SPOKE17 时基Ctr : OSTickCtr TMR 的Ctr : OSTmrTickCtr 就绪表:OSRdyList32 映射Prio 的BitMap :OSPrioTbl0 优先级个数无上限全局索引:Global OSRunning OSTickCtr OSTmrTickCtr 统计: OSFlagQty OSMemQty OSMutexQty OSQQty OSSemQty OSTaskQty OSTmrQty 正文切换: OSPrioCur OSPrioHighRdy OSPrioTbl 0 OSRdyList32OSTCBCurPtr * OSTCBHighRdyPtr * 嵌套: OSIntNestingCtr OSSchedLockNestingCtr OSTaskCtxSwCtr QQ:1065956662 Q 群:275591093 E-mail: 仅供参考啊 , 难免有错 , 见谅见谅 。 2014.3.17

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报