vxworks基础培训内容摘要:

化数据交换。 为避免争夺,需要对内存的访问上锁以保证访问互斥进行。 实现资源互斥访问的方法: 禁止中断 禁止抢先 使用信号量 信号量 • VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间的最快速通信。 •对于互斥,信号量可以上锁对共享资源的访问。 并且比禁止中断或禁止抢占提供更精确的互斥粒度。 信号量的种类 •二进制:最快最通用的信号量,用于同步和互斥。 •互斥:一种特殊的二进制信号量,对互斥固有的问题进行了优化:优先级继承,删除安全性,递归。 •计数器,类似 二进制信号量 , 但是跟踪给定信号量的次数,优化用于一个资源的多个实例。 信号量控制 • semBCreate() 分配并初始化一个二进制信号量 • semMCreate() 分配并初始化一个互斥信号量 • semCCreate() 分配并初始化一个计数器信号量 • semDelete() 终止并释放一个信号量 • semTake() 取一个信号量 • semGive() 释放一个信号量 • semFlush() 解锁所有等待该信号量的任务 二进制信号量 •一个二进制信号量可认为是一种标记:对应资源是 “ 可获得 ” (满)还是 “ 不可获得 ” (空)。 •如果信号量是满,在任务取之后变成空,任务可继续执行,如果信号量是空,则任务排到阻塞队列中进入悬挂状态。 •可以满足两种类型的任务协调需要:互斥和同步。 互斥信号量 •互斥信号量是一种特殊的双态信号量,它用于解决某些互斥中的内在问题,包括: •优先级倒置 •删除保护 •对资源的递归调用。 •互斥信号量有一个 SEM_INVERSION_SAFE的参数,可以实现优先级继承的算法。 优先级继承协议允许访问同一临界资源的一组任务中,当前运行的任务可继承任务组中的最高优先级。 从而解决了优先级倒置的问题。 删除安全 •互斥中的另一个问题涉及到任务的删除。 删除一个在临界资源中的正在执行的任务往往会带来严重的错误。 •互斥信号量提供了一个 SEM_DELETE_SAFE的参数使得每个 semTake()都含有 taskSafe(),且每个 semGive()都含有 taskUnsafe()。 通过这个方法,一个持有信号量的任务就可以得到删除保护。 计数器信号量 •计数信号量与双态信号量的唯一区别在于它跟踪信号量 GIVE的次数。 •计数信号量用于保护具有多个复制的资源。 消息队列 •在 VxWorks中,单个 CPU中任务之间的通信主要是由消息队列完成。 • Wind提供按 FIFO排队的消息队列,但有一个例外, Wind消息队列有两个优先级: –正常 MSG_PRI_NORMAL –紧急 MSG_PRI_URGENT 消息队列控制函数 • msgQCreate() 分配并初始化一个消息队列 • msgQDelete() 终止并释放一个消息队列 • msgQSend() 向一个消息队列发送消息 •。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。