ImageVerifierCode 换一换
格式:PDF , 页数:1 ,大小:441.70KB ,
资源ID:10284925      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10284925.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(uCos iii 思维导图.pdf)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

uCos iii 思维导图.pdf

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营业执照举报