vxworks入门实验课.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vxworks入门实验课

实验三 信号量 1 实验目的 1.学习使用信号量实现共享资源的保护 2 实验内容 在实验一建立的project 中,创建2 个任务,一个任务将全局变量设为1;一 个任务将全局变量设为0 。观察运行结果。 3 实验设备及工具 1.硬件: a) PC 机 2 .软件: a) PC 机操作系统Windows2000 或windowsXP b) Tornado2.2 4 实验原理 信号量允许多个任务相互协调其活动。任务间最直接的通信方式就是共享各 种各样的数据结构。由于 VxWorks 使用单地址空间,所有任务存在于一个单一 的线性地址空间中,共享数据结构也就非常容易实现。全局变量、各类缓冲、链 表和指针都可以被运行在不同任务上下文的代码直接引用。 然而,对于共享的数据,需要保证对其的互斥访问。VxWorks 提供了许多实 现共享临界区互斥访问的机制,信号量就是其中一种。 VxWorks 内核Wind 提供三种类型的信号量用于解决不同类型的问题: 二进制信号量(binary ):可以用于实现同步和互斥。 互斥信号量(mutual exclusion ):一种特殊的信号量,适于解决具有内在 互斥的问题:优先级继承、删除安全和递归。 计数信号量(counting ):适用于保护具有多个数据的资源。 4.1 信号量的控制 Wind 内核为上述三类信号量提供不同的创建函数:semBCreate() 、 semMCreate()和semCCreate(),但提供统一的控制函数:semDelete()、semTake()、 semGive()、semFlush() 。它们的原型分别为: SEM_ID semBCreate ( int options, SEM_B_STATE initialState); /* create and initialize a binary semaphore*/ SEM_ID semMCreate ( int options); /* create and initialize a mutual-exclusion semaphore*/ SEM_ID semCCreate ( int options, int initialCount); /* create and initialize a counting semaphore*/ STATUS semDelete ( SEM_ID semId); /* delete a semaphore */ STATUS semGive ( SEM_ID semId); /* give a semaphore*/ STATUS semTake ( SEM_ID semId, int timeout); /* take a semaphore*/ STATUS semFlush ( SEM_ID semId); /* unblock every task pended on a semaphore*/ 下面的例子使用二进制信号量。二进制信号量可以作为资源可用或不可用的 标志。任务使用 semTake()取一个信号量,其结果取决于调用时该二进制信号量 是否可用。如果可用,信号量将变得不可用,而任务继续执行。如果信号量不可 用,任务被挂起到任务阻塞队列,直到该信号量可用。 当任务释放一个二进制信号量时要调用 semGive(),其结果也要依赖于调用 时刻该信号量是否可用。如果可用,本次释放信号量不起任何作用;如果信号量 不可用,而且没有任务在等待该信号量,那么信号量变为可用;如果信号量不可 用,并且有一个或多个任务等待该信号量,那么阻塞队列中的第一个任务解除阻 塞,而信号量仍不可用。 例中,两个任务(taskOne 和taskTwo )竞争修改一个全局变量global 的值, 任务taskOne 将Global 修改为1,而任务taskTwo 则将其修改为0 。 5 实验步骤 1.编程(假设编写的源文件为s3_sem.c ) 2 .将s3_sem.c 添加到project 中 3

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档