- 1、本文档共59页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VxWorks基礎培训
VxWorks基础培训 概 念 VxWorks是WindRiver公司开发的具有工业领导地位的高性能实时操作系统内核,具有先进的网络功能。 VxWorks的开放式结构和对工业标准的支持,使得开发人员易于设计高效的嵌入式系统,并可以很小的工作量移植到其它不同的处理器上。 VxWorks内核—Wind VxWorks是带有一个相当小的真正微内核的层次结构。内核仅提供多任务环境、进程间通信和同步功能。这些功能模块足够支持VxWorks在较高层次所提供的丰富的性能的要求。 多任务内核、任务机制、任务间通信和中断处理机制是VxWorks运行环境的核心。 多任务 一般的应用被转换成相互独立又相互协作的程序,每一个程序在运行时称作一个任务。 VxWorks的实时内核wind提供了一个基本的多任务环境。内核按照一种调度算法交替运行各个任务,每一个任务都有自己的上下文。在一次上下文切换中,一个任务的上下文被存在任务控制块(TCB)中。 任务状态 任务状态反映任务当前在系统所处的情形。在VxWorks中,任务有几种状态 :就绪(READY)、阻塞(PEND)、睡眠(DELAY)、挂起(SUSPEND)及它们的组合DELAY+S、PEND+S、PEND+T、PEND+S+T、State+I。 任务状态转换 Wind微内核的状态迁移表如下图所示: Wind内核的任务调度 多任务处理需要一个调度法则对CPU准备运行的任务进行分配。对于wind内核来说,基于优先级的抢占调度方式是系统的默认工作方式。当然,也可以根据应用程序的需要选择时间片轮转的调度方式。 任务的调度控制程序有: -taskPrioritySet( ) 改变一个任务的优先级 -taskLock( ) 禁止任务的重调度 -taskUnlock( ) 允许任务的重调度 优先级式的抢先调度 每一个任务都有一个优先级,内核则确保首先把CPU分配给优先级最高的一个待运行的任务,这个调度的策略就是一个优先级别较高的待运行任务可以抢先运行,内核会立即存储当前正在运行的任务的上下文并切换到高优先级的任务的上下文。 Wind内核一共有256个优先级别,从0到255,0优先级最高,255最低,任务在建立的同时也分配了一个优先级。 当任务执行时可以调用taskPrioritySet()动态改变自己的优先级。 基于优先级的抢占调度示意图 时间片轮转式调度 基于优先级的抢占式调度可以与轮转调度相结合。 轮转式调度是指在同一优先级别上的就绪任务可以公平地共享CPU,每一个任务可以运行一个确定的时间片,然后循环运行其它的任务,每个任务都是相同的时间片。 基于优先级的抢占式调度与轮转调度算法相结合调度示意图 抢占上锁 Wind的调度器可以通过tasklock( )和taskUnlock( )对一个任务锁定或允许抢先调度。当一个任务通过调用taskLock( )来锁定抢先调度,在任务的运行期间就避免了高优先级的任务的抢占。 VxWorks任务编程接口 在VxWorks中的taskLib可以得到有关任务的基本例程。这些程序提供了任务的创建、控制和和获取任务信息。 任务的创建和激活 函数调用 描 述 taskSpawn( ) 产生并激活一个新的任务 taskInit( ) 初始化一个新的任务 taskActivate( ) 激活一个已经初始化的任务 taskSpawn()的参数包括新任务的名称(ASCII码串),优先级,选项,堆栈大小,主程序地址,和10个可以传递给主程序的起始参数。 调用示例: id=taskSpawn(name,priority,option, stacksize,entFunc,arg1,…arg10); taskSpawn()例程屏蔽了低层次的分配、初始化、激活步骤。初始化、激活功能由taskInit()和taskActivate()函数提供,然而,建议只有当需要在分配或激活上进一步控制的时候才使用他们。 任务信息 taskInfoGet( ) 获得一个任务的信息 taskPriorityGet( ) 检查任务的优先级 taskRegsGet( ) 检查任务的寄存器 taskregsSet( ) 设置一个任务的寄存器 taskIsSuspended( ) 检查任务是否处于悬挂状态 taskIsReady( ) 检查任务是否就绪 taskTcb( ) 获得任务控制块的指针 由于任务的状态是动态的,获取信息前必须挂
您可能关注的文档
最近下载
- 小学六年级下册数学 期末测试卷及答案.docx
- 2024年芜湖职业技术学院单招职业适应性测试试题库 带答案(实用).docx
- 2024年中级注册安全工程师《专业实务-建筑施工安全》真题及答案解析.pdf
- 乌鲁木齐地区2025年高三年级第一次质量监测(一模)物理试卷(含官方答案).pdf
- 2023年中科院遗传所遗传学考博试题含有整理答案详细.pdf
- 2025会计考试题库及答案(通用6篇) .pdf VIP
- 2014款上汽大众途观_汽车使用手册用户操作图示图解详解驾驶指南车主车辆说明书电子版.pdf
- 秋叶 - COC七版半自动人物卡v2.0.1(通用)(2022年-2023年).pdf VIP
- (完整)高考英语3500词汇表中英文 .pdf
- 住院患者身体约束中华护理学会团体标准解读.pptx
文档评论(0)