2VxWorks的任务与任务编程接口.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2VxWorks的任务与任务编程接口

* POSIX调度接口 schedPxLib库提供了POSIX 1003.1b调度函数,使得用户可以 使用可移植的接口获得/设置任务的优先级, 得到任务的最大/最小优先级 以及时间片的长度(如果使用时间片轮转调度的话) * schedPxLib 设置任务的优先级 获得指定任务的调度参数 获得任务的调度策略 放弃CPU 设定任务的调度策略和参数 获得最大、最小优先级 如果是轮转调度,获得时间片的大小 * POSIX和wind调度方法的差异 不同: POSIX调度基于进程,而Wind调度基于任务。 进程与任务的不同在于: 任务可以直接访问内存,而进程不可以 进程仅仅继承了父进程的特定特征,而任务则操作在与父任务完全一样的环境中 进程与任务的相似之处: 任务和进程都可以被单独调度 * POSIX与wind的优先级编号方案不同 POSIX的优先数大,优先级高 Wind的优先数大,优先级低 任务间通信 xlanchen@2006.7.12 * 1、任务间通信机制 任务间通信功能用于协调多个独立任务间的活动 VxWorks提供一套丰富的任务间通信机制,包括: 共享内存:数据的简单共享 信号量:基本的互斥与同步 消息队列和管道:同一CPU内多任务间消息传递 Sockets和远程过程调用:任务间透明的网络通信 Signals:用于异常处理 另外,可选的VxMP提供运行在同一底板上多个CPU的任务间通信机制 * 2、共享数据结构 任务间通信最直接的方法是共享数据结构。 由于所有VxWorks任务共存于单一的线性地址空间,在多个任务间共享数据结构是非常容易的。任一程序中定义的各种类型的全局变量,都可被所有任务直接访问。 * 举例:多个任务间共享数据结构 * VxWorks定义了几种数据类型: 线性缓冲 环形缓冲 链表等 这些类型可以被运行在不同上下文的代码引用 方便了用户编程 * 2.1、链表 这是一种双向数据结构,在 tornado\target\h\lstLib.h 中定义 * VxWorks提供lstLib库设置和控制链表 * 这些操作主要包括: 在链中任意位置插入或删除节点 在链尾增加一个节点 链接两个链表 从一个链表中提取一个子链表 删除并返回链表头节点 计算链表中的节点个数 * 2.2、环形缓冲 这是一种环形缓冲数据结构,在 tornado\target\h\rngLib.h 中定义 环形缓冲大小固定,以先进先出方式工作 * VxWorks的rngLib提供环形缓冲管理函数 创建/删除环形缓冲 从环形缓冲取得字符 向环形缓冲添加字符 以不同方式操纵环形缓冲 * * 3、互斥 当一个共享地址空间用于交换数据时,为了避免竞争,需要互斥访问这段共享地址空间 实现互斥的方法包括 禁止中断 禁止抢占 使用信号量 * 3.1、中断上锁 中断上锁是互斥机制中最强有力的方法,可以保证对CPU的独占访问 * 中断上锁和反应时间 中断上锁会导致系统对外部事件的响应迟钝(ISR得不到执行) 对实时系统而言,导致实时性得不到保证,因而不适合作为一种通用的互斥方法 通常只用于ISR的互斥 注意:在任何情况下,应当使中断上锁的时间尽量的短 * 3.2、抢占上锁 抢占上锁可以禁止任务抢占,但ISR仍然能够执行 仍然会降低实时性,应当使抢占上锁的时间尽量的短 * * 大部分VxWorks程序使用的重入机制 使用动态堆栈变量 使用信号量保护全局或静态变量 任务变量 Wind推荐使用上述技术编写可重入代码 * 动态堆栈变量 许多子程序仅仅是纯代码,除了动态堆栈变量外没有自己的数据 这些程序除了调用者以参数形式提供的数据之外,不需要其他数据 例如lstLib链表操作库 它的程序操作由调用者提供lists和nodes 这种程序只在自己的堆栈内进行操作 * 动态堆栈变量,图示 * 受保护的全局/静态变量 使用semLib中提供的信号量对全局/静态变量进行互斥保护 将在任务间通信中介绍信号量机制 * 任务变量 任务变量机制允许在任务上下文中定义自己的私有变量,随着上下文切换而切换 随着上下文的切换而切换 * 使用相同主程序的多个任务 VxWorks可以使用同一个主程序作为几个不同的任务运行,每个任务将使用自己的堆栈和上下文,并分别传给该程序不同的参数 可以满足同一个程序需要以不同的参数并发执行的情况,例如 机械臂的多个连接可以使用相同 的代码joint来控制,使用关节号 来指定要操纵的连接 * VxWorks的系统任务 VxWorks包含以下系统任务: 根任务tUsrRoot 内核执行的第一个任务 初始化VxWorks系统的主要功能,例如 发起日志任务、异常处理任务、网络任务和tRlogind后台任务 通常,上述初始化结束之后,根任务终止并删除 用户可以向根任务

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档