VxWorks多任务同步与通信方法技术

技术编号:4049931 阅读:275 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种VxWorks多任务同步与通信方法,包括:创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。本发明专利技术利用C++类封装的方法对VxWorks的消息队列和信号量进行封装,轻松地实现多任务之间的同步和通信,大大降低了多任务协作的难度。

【技术实现步骤摘要】

本专利技术涉及VxWorks操作系统
,尤其涉及一种VxWorks多任务同步与通信方法。
技术介绍
VxWorks操作系统是一种嵌入式实时操作系统,允许多任务的同时运行。当多任务 同时运行时,任务之间的同步与通信是非常必要的。共享数据是VxWorks操作系统实现多任务同步与通信的途径之一。采用共享数据 时,通常采用VxWorks提供的信号量来保证共享数据的互斥访问,但当相互之间需要同步 与通信的任务比较多时,共享数据互斥访问的算法会很复杂,加大了多任务协作的难度。此外,VxWorks操作系统还提供了消息队列的方式来允许任务之间相互发送消息, 任何任务都可以发送消息到消息队列和从消息队列接收消息,来实现相互间的同步与通 信。但是,由于两个任务间全双工地通信一般需要两个消息队列,每个提供一个流通方向, 因此当相互之间需要同步与通信的任务比较多时,消息队列的数量会变得很大,对消息队 列的管理也会变得很复杂,加大了多任务协作的难度。
技术实现思路
有鉴于此,本专利技术提供一种,以解决现有技术中, 当相互之间需要同步与通信的任务比较多时,由于共享数据互斥访问的算法很复杂或消息 队列的数量很大,所造成的多任务协作难度大的问题,技术方案如下一种,包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。优选的,上述方法中,所述对多任务的操作包括任务创建、任务运行、任务暂停和任务销毁。优选的,上述方法中,所述创建MTLMutex对象对信号量进行封装包括在MTLMutex的构造函数中创建信号量,在MTLMutex的析构函数中删除信号量,在 MTLMutex的lock函数中获取信号量,在MTLMutex的unlock函数中释放信号量。优选的,上述方法中,所述创建MTLRecursiveMutex对象对信号量进行封装包括在 MTLRecursiveMutex 的构造函数中创建信号量,在 MTLRecursiveMutex 的析构函数中删除信号量,在MTLRecursiveMutex的lock函数中获取信号量,在 MTLRecursiveMutex的unlock函数中释放信号量。优选的,上述方法中,所述创建MTLMonitor对象对消息队列进行封装包括在MTLMonitor的构造函数中创建消息队列,在MTLMonitor的析构函数中删除消 息队列,在MTLMonitor的wait函数中从消息队列获取消息,在MTLMonitor的notify函数 中向消息队列发送消息。优选的,上述方法中,所述创建MTLSynchronized对象对信号量和消息队列进行 统一管理,为用户提供统一的接口和用法包括在MTLSynchronized的构造函数中获取信号量和/或从消息队列中获取消 息,在MTLSynchronized的析构函数中释放信号量和/或向消息队列中发消息,在 MTLSynchronized的成员函数中实现对信号量或消息队列的其它操作。优选的,上述方法中,所述利用所述统一的接口和用法实现多任务的同步与通信 包括通过调用MTLMutex和MTLRecursiveMutex类的lock和unlock函数进行多任务 之间的同步;通过调用MTLMonitor类的wait和notify函数实现多任务之间的通信;通过定义MTLSynchronized类对象实现多任务的同步与通信。优选的,上述方法中,所述通过定义MTLSynchronized类对象实现多任务的同步 与通信包括MTLSynchronized的构造函数调用其成员变量MTLMonitor类对象的wait函数以 及MTLMutex和MTLRecursiveMutex类对象的lock函数,获取信号量或从消息队列中获取 消息;MTLSynchronized的析构函数中调用其成员变量MTLMonitor类对象的notify函 数以及MTLMutex和MTLRecursiveMutex类对象的unlock函数,释放信号量和向消息队列 发送消息;MTLSynchronized的成员函数实现对信号量和消息队列的其它操作。通过以上技术方案可知,本专利技术通过将VxWorks的信号量和消息队列封装成 多任务库,即创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法;从而使用户仅通过创建和使用C++对象的方 法即可对多任务进行同步和通信控制,大大降低了多任务协作的难度。附图说明为了更清楚地说明本专利技术的技术方案,下面将对本专利技术描述中所需要使用的附图 作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普 通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的流程图。具体实施例方式本专利技术实施例针对现有技术存在的多任务协作的难度大的问题,提出了一种 多任务同步与通信方法,该方法包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和 MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装, 创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和 用法;利用所述统一的接口和用法实现多任务的同步与通信。本专利技术实施例提供的多任务同步与通信方法,利用C++类封装的方法对VxWorks 的消息队列和信号量进行封装,将消息队列和信号量与一定的数据结构相结合,使用户通 过定义C++类对象的方法来创建、使用和销毁消息队列与信号量,通过调用对象的方法来 与其它任务通信,从而轻松地实现多任务之间的同步和通信,大大降低了多任务协作的难度。为了使本领域技术人员更好的理解和实施本专利技术,下面将结合说明书附图对本发 明实施例的技术方案进行进一步详细阐述。参见图1所示,本专利技术实施例提供的可以包括以 下步骤S101,创建MTLInitialize对象对多任务运行环境进行初始化。使用多任务库之前,必须创建MTLInitialize对象,对VxWorks操作系统的多任务 运行环境进行初始化。MTLInitialize类的构造函数会进行任务私有变量的分配、创建任务 管理类等初始化操作,通过创建MTLInitialize对象即可进行多任务运行环境的创建。S102,创建MTLThread对象将对多任务的操作进行封装。通过创建MTLThread对象可以实现对多任务的操作进行封装,对多任务的操作 包括任务创建、任务运行、任务暂停和任务销毁。其中,MTLThread类的构造函数会进行 VxWorks操本文档来自技高网...

【技术保护点】
一种VxWorks多任务同步与通信方法,其特征在于,包括:创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。

【技术特征摘要】

【专利技术属性】
技术研发人员:王凯刘江宁
申请(专利权)人:山东中创软件工程股份有限公司山东中创软件商用中间件股份有限公司
类型:发明
国别省市:88[中国|济南]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利