- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VxWorks任务基础
VxWorks应用设计 中科信软培训中心 四、VxWorks任务基础 4.1 VxWorks的实时多任务简介 实时性使得一个控制系统能够及时响应对该系统的控制。 如果一个系统的响应时间是可以预测的,则它就是一个具有确定性的系统。 从一个事件发生到它被响应之间的时间称为Latency。 确定性响应是实时系统性能关键因素。 4.2 VxWorks的多任务内核 Wind内核是VxWorks中直接控制任务的部分。 根据VxWorks的调度机制为任务分配CPU。 使用任务控制块(TCB)来控制任务。 – 每个任务都有一个任务控制块 – TCB的数据结构定义WIND_TCB在头文件taskLib.h 中。 – 操作系统关于任务的控制信息包括,状态、任务优先级、延时时间、断点列表、出错状态等。 – CPU的上下文信息包括,PC、SP、CPU寄存器等。 4.3 VxWorks的任务状态 就绪态:任务正在等待CPU资源 休眠态:任务正在等待除CPU资源外的其他资源 延迟态:任务正在等待一定的时间延时 悬置态:任务无法执行,主要是用于调试的一种状态。 4.4 任务状态的转换 状态转换 函数 就绪态→悬置态 semTake()/msgQReceive() 就绪态→延迟态 taskDelay() 就绪态→休眠态 taskSuspend() 悬置态→就绪态 semGive()/msgQSend() 悬置态→休眠态 taskSuspend() 延迟态→就绪态 Expired delay 延迟态→休眠态 taskSuspend() 休眠态→就绪态 taskResume() 休眠态→悬置态 taskSuspend() 休眠态→延迟态 taskResume() 上下文切换 每当停止执行一个任务,并有一个新的任务开始执行,就会发生上下文的切换。 为了对一个新任务实现重新调度,内核必须做如下工作: – 将目前正在执行的任务的上下文保存进它的TCB中; – 将要执行的任务的上下文从它的TCB中恢复。 上下文切换的速度必须非常快 什么时候会发生上下文切换 任务在执行过程中会发生同步上下文切换 – 任务自身发生阻塞、延时、挂起等状态变化 – 当一个优先级高的任务准备运行 – 降低任务的优先级或任务退出执行(不常发生) 当有中断ISR到来时会发生异步上下文切换 – 使得一个优先级高的任务准备运行 – 挂起当前的任务或降低它的优先级(不常发生) 同步上下文切换比异步上下文切换要保存的寄存器少,因此切换速度快 基于优先级的调度 不同的应用应该有不同的优先级,这一点应该在CPU的分配中得到体现。 抢占调度是基于任务的优先级,该优先级的选择反应了任务的重要性。默认情况下相同优先级的任务之间不会发生抢占 系统内核一旦发现有一个优先级比当前正在运行的任务的优先级高的任务处于Ready状态,内核就立即保存当前任务的上下文切换,将当前任务变为pended状态,并切换到该高优先级任务的上下文执行。 下列情况在任何时候会导致重新调度。 – 内核调用(kernel calls) – 中断(例如系统时钟中断) 上下文的切换不会延迟到下一个系统时钟中断。 基于轮转的调度 任务间平等地占用CPU时间 轮转调度机制使得具有相同优先级地任务公平地分享CPU 轮转调度使用时间片来实现相同优先级任务对CPU的公平分配。 时间片设置 – KernelTimeSlice(ticks) (当ticks=0时,时间片设置被关闭) 基于优先级的调度总是优先的 – 基于轮转的调度仅仅用于具有相同优先级的任务 基于优先级的重新调度可以在任何时间发生 – 基于轮转的调度要以系统的ticks为间隔 4.5 VxWorks中的任务 一个VxWorks的任务包含 – 一个堆栈(用于存储变量和传送给程序的参 数) – 一个TCB(用于OS控制) 不要混淆可执行代码和执行它的任务 – 代码是在任务启动之前可以被下载的 – 多个任务可以执行同样的代码(如printf()) 4.5.1创建一个任务 为了创建一个任务,VxWorks必须 – 再内存池中为任务分配Stack和TCB的存储空间。taskSpawn()函数在一块连续的空间分配这些存储空间。 – 初始化Stack(例如为任务创建一个有初始化值的Stack) – 初始化TCB(在TCB中存储函数入口点指针,初始化stack指针) – 把任务放到Ready队列 创建一个任务 int taskSpawn( name, priority, options, stackSize,entryPt, arg1,…,arg10) Name 任务名,如果是NULL系统就给一个默认的名字 Priority 任务优先级,值从0-255 Options 任务选项,如VX_UN
您可能关注的文档
- unit8Have you read Treasure Island yetA3a-3C 说课课件.ppt
- Unit8-B上课用课件.ppt
- Unit8Howdo-you-make-a-banana-milk-shake 第一课时.ppt
- Unit9-Section A 七上新目标.ppt
- unit9-have-you-ever-been-to-a-museumPPT听课.ppt
- Unit9_Have__you__ever__been__to_a museum_SectionB课件.ppt
- Unit9_Have__you__ever__been__to_a_museum_SectionB课件.ppt
- Units7-12知识点.doc
- Unity3D4.1版本粒子系统.docx
- Unit_12_You’re_supposed_to_shake_hands._SelfCheck.ppt
- 2025年浙江体育职业技术学院单招职业倾向性考试题库附答案.docx
- 2025年合肥科技职业学院单招职业技能考试题库必威体育精装版.docx
- 2025年梧州职业学院单招职业技能测试题库必威体育精装版.docx
- 2025年山西职业技术学院单招职业倾向性考试题库附答案.docx
- 2025年安庆医药高等专科学校单招职业适应性测试题库及参考答案1套.docx
- 2025年喀什职业技术学院单招职业适应性考试题库精选.docx
- 2025年山东轻工职业学院单招职业适应性考试题库必威体育精装版.docx
- 2025年桂林师范高等专科学校单招职业倾向性测试题库精选.docx
- 胃脘痛中医护理查房.pptx
- 2025年三门峡职业技术学院单招职业倾向性测试题库精编.docx
文档评论(0)