基于双缓存机制的实时系统多任务数据共享方法技术方案

技术编号:13633185 阅读:114 留言:0更新日期:2016-09-02 15:49
本发明专利技术公开了一种基于双缓存机制的实时系统多任务数据共享方法,包含双缓存结构初始化操作、双缓存写入操作和双缓存读取操作,双缓存初始化操作对双缓存结构进行分配内存、设置初值等初始化活动。双缓存读取操作由读取任务调用对双缓存结构进行数据读取;双缓存写入操作由写入任务调用对双缓存结构进行数据写入。本发明专利技术由于使用了双缓存机制,即不影响原有的系统调度,又保证了写入数据的更新率和读取的数据的相对一致性、及时性、不重复性。

【技术实现步骤摘要】

本专利技术涉及一种实时系统任务间数据共享方法,特别是指基于VxWorks653系统的分区内一个任务写入,多个任务读取的数据共享方法。
技术介绍
VxWorks653系统提供了APEX Buffers(缓存)、Blackboards(黑板)、Semaphores(信号量)等方式进行分区内的任务(进程)间数据通讯。Buffers(缓存)方式:可以将Buffer看成一个消息队列,先创建Buffer,设定Buffer里消息队列的深度和单个消息的最大字节数。任务(进程)间通过该消息队列以先入先出或者优先级排队方式(视Buffer设置而定)进行数据通讯。每写入一条消息队列深度加一,队列深度达到最大值后,无法写入。每读取一条消息,队列深度减一。该方式在一个任务写入数据,多个任务读取数据的情况下,如果只采用一个Buffer很难保证每个任务都能读到共享数据,因为如果有快速高优先级任务参与读取的话,在低优先级慢速周期任务读取之前,Buffer可能就会被读空。如果要保证每个读取任务都能读到数据就要将队列深度设置足够大,或者单独为每对读写任务分配缓存。这样做会增加内存开销,加重写入任务负担,对分区资源造成一定的浪费、消耗。而且每个读取任务读到数据会有较大差异。即使队列深度足够大,如果读数据的任务没有及时将消息读走,会导致写入数据任务的写入失败,无法保证数据的更新。Blackboards(黑板)方式:可以将黑板看成一块共享内存区,写入任务执行显示(写入)操作,写入数据。读取任务可以在黑板被擦掉前读取数据。该方式在一个任务执行写入数据,多个任务读取数据的情况下,写入任务如果
写黑板过快,则读取任务无法读到数据,如果等待读取所有任务读取完成再写入,无法保证数据的更新。另外,除非将读取到的数据与之前数据做对比,读取任务是无法得知黑板上的内容是否有更新的。这样就存在,写入内容没更新之前,会有读取任务不断读取相同内容的数据,造成时间、资源上的浪费。Semaphores(信号量)方式:通过对共享内存上锁方式,在任务间进行数据共享。如果负责读取的低优先级任务获取信号量后,共享区被锁,原有任务调度方案将会被改变,高优先级的写入任务将被阻塞,无法写入最新数据,这对数据更新率要求高的环境存在最新数据被丢弃的风险。上述三种方式还存在一个共同特征:缺乏通用性和可移植性,仅能在分区初始化时事先创建,并用于本分区,而且已分配的内存资源不可删除。
技术实现思路
专利技术目的:为了解决现有技术资源消耗大、可能会改变任务调度方案、数据更新效率低、缺乏通用性和可移植性的问题,本专利技术提供一种基于双缓存机制的实时系统多任务数据共享方法,可以高效完成VxWorks653系统分区内多任务间数据共享,特别是一个任务写入,多个任务读取的情况。并且该方法可扩展应用到其他多任务系统中。本专利技术的专利技术目的通过以下技术方案实现:一种基于双缓存机制的实时系统多任务数据共享方法,包含双缓存结构初始化操作、双缓存写入操作和双缓存读取操作;所述双缓存结构初始化操作完成缓存区A和缓存区B的内存分配,以及缓存区A的可写入标志、缓存区B的可写入标志、缓存区可读取标志、缓存区写入次数、缓存区A的更新标志、缓存区B的更新标志、读取任务更新标志、缓
存区A的地址、缓存区B的地址的设置;所述双缓存写入操作包含以下步骤:步骤2.1、判断待写入数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则根据缓存区可读取标志执行下一步:步骤2.2、如果是第一次写入,则将数据写入缓存区A;如果不是第一次写入,判断非上一次写入的缓存区的可写入标志是否代表可以写入,如何可以写入则将数据写入非上一次写入的缓存区,如果非上一次写入缓存区不可写入,判断上一次写入的缓存区的可写入标志,如果也不可写入,返回错误代码,如果上一次写入缓存区可以写入,先将缓存区可读取标志指向非上一次写入缓存区,然后将数据写入上一次写入缓存区;步骤2.3、更新缓冲区写入次数,将本次写入的缓存区的更新标志设置为更新后的缓冲区写入次数,将缓存区可读取标志指向本次写入的缓存区,返回写入字节数,写入完成;所述双缓存读取操作包含以下步骤:步骤3.1、判断待读取数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则执行下一步;步骤3.2、判断读取任务与写入任务的优先级高低,若读取任务优先级高于或等于写入任务,则判断缓存区可读标志所指向的缓存区的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志,然后读取缓存区可读标志所指向的缓存区的数据,返回读取字节数;若读取任务优先级低于写入任务,先通过缓存区A的可写入标志判断缓存区A是否正在被其他任务读取,如果是,根据缓存区A的更新状态是否大于本
次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志并且缓存区A的可写入标志加1,然后读取缓存区A中的数据,读取完成后,缓存区A的可写入标志减1,返回读取字节数;如果缓存区A没有正在被其他任务读取,则再通过缓存区B的可写入标志判断缓存区B是否正在被其他任务读取,如果是,则根据缓存区B的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志并且缓存区A的可写入标志加1,然后读取缓存区A中的数据,读取完成后,缓存区A的可写入标志减1,返回读取字节数。依据上述特征,所述步骤3.2中还包含如果缓存区没有数据更新,则返回0。依据上述特征,所述步骤3.2中还包含若读取任务优先级低于写入任务时,如果两个缓存区都没有被其他任务读取,则判断缓存区可读标志所指向的缓存区的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志,然后读取缓存区可读标志所指向的缓存区的数据,返回读取字节数。进一步,所述的实时系统多任务数据共享方法还包含双缓存删除操作,所述双缓存删除操作用于释放缓存区A、缓存区B的已分配内存,将单个缓冲区能处理的最大字节数置0。本专利技术基于双缓存机制的实时系统多任务数据共享方法主要应用于VxWorks653系统。与现有技术相比较,本专利技术在多任务间共享数据时,只需根据共享数据大小,通过初始化操作建立一个与之匹配的双缓存结构,动态分配所需内存,最大值是待共享数据的一倍,不会消耗过多系统资源。读取任务和写入任务使用相关的读写操作可以完成数据读写功能,由于使用了双缓存机制,即不影响原
有的系统调度,又保证了写入数据的更新率和读取的数据的相对一致性、及时性、不重复性。另外,如果开发语言使用得当,比如用C语言等实现本专利技术,可以具有非常好的通用性和可移植性。【附图说明】图1为实施本专利技术的双缓存数据结构内存模型图。图2为实施本专利技术的双缓存初始化操作流程。图3为实施本专利技术的双缓存写入操作流程。图4为实施本专利技术的双缓存读取操作流程。图5为实施本专利技术的双缓存删除操作流程。【具体实施方式】下面通过具体实施方式对本专利技术作进一步详细说明。本专利技术首先设计了一种双缓存数据结构、所述双缓存数据结构包括:单个缓存区最大值(字节数)、缓存区A可写入标志、缓存区B可写入标志、缓存区可读取标志、缓存区写入次数、缓存区A本文档来自技高网
...

【技术保护点】
一种基于双缓存机制的实时系统多任务数据共享方法,包含双缓存结构初始化操作、双缓存写入操作操作和双缓存读取操作操作,其特征在于:所述双缓存结构初始化操作完成缓存区A和缓存区B的内存分配,以及缓存区A的可写入标志、缓存区B的可写入标志、缓存区可读取标志、缓存区写入次数、缓存区A的更新标志、缓存区B的更新标志、读取任务更新标志、缓存区A的地址、缓存区B的地址的设置;所述双缓存写入操作操作包含以下步骤:步骤2.1、判断待写入数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则根据缓存区可读取标志执行下一步:步骤2.2、如果是第一次写入,则将数据写入缓存区A;如果不是第一次写入,判断非上一次写入的缓存区的可写入标志是否代表可以写入,如何可以写入则将数据写入非上一次写入的缓存区,如果非上一次写入缓存区不可写入,判断上一次写入的缓存区的可写入标志,如果也不可写入,返回错误代码,如果上一次写入缓存区可以写入,先将缓存区可读取标志指向非上一次写入缓存区,然后将数据写入上一次写入缓存区;步骤2.3、更新缓冲区写入次数,将本次写入的缓存区的更新标志设置为更新后的缓冲区写入次数,将缓存区可读取标志指向本次写入的缓存区,返回写入字节数,写入完成;所述双缓存读取操作操作包含以下步骤:步骤3.1、判断待读取数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则执行下一步;步骤3.2、判断读取任务与写入任务的优先级高低,若读取任务优先级高于或等于写入任务,则判断缓存区可读标志所指向的缓存区的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志,然后读取缓存区可读标志所指向的缓存区的数据,返回读取字节数;若读取任务优先级低于写入任务,先通过缓存区A的可写入标志判断缓存区A是否正在被其他任务读取,如果是,根据缓存区A的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志并且缓存区A的可写入标志加1,然后读取缓存区A中的数据,读取完成后,缓存区A的可写入标志减1,返回读取字节数;如果缓存区A没有正在被其他任务读取,则再通过缓存区B的可写入标志判断缓存区B是否正在被其他任务读取,如果是,则根据缓存区B的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志并且缓存区A的可写入标志加1,然后读取缓存区A中的数据,读取完成后,缓存区A的可写入标志减1,返回读取字节数。...

【技术特征摘要】
1.一种基于双缓存机制的实时系统多任务数据共享方法,包含双缓存结构初始化操作、双缓存写入操作操作和双缓存读取操作操作,其特征在于:所述双缓存结构初始化操作完成缓存区A和缓存区B的内存分配,以及缓存区A的可写入标志、缓存区B的可写入标志、缓存区可读取标志、缓存区写入次数、缓存区A的更新标志、缓存区B的更新标志、读取任务更新标志、缓存区A的地址、缓存区B的地址的设置;所述双缓存写入操作操作包含以下步骤:步骤2.1、判断待写入数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则根据缓存区可读取标志执行下一步:步骤2.2、如果是第一次写入,则将数据写入缓存区A;如果不是第一次写入,判断非上一次写入的缓存区的可写入标志是否代表可以写入,如何可以写入则将数据写入非上一次写入的缓存区,如果非上一次写入缓存区不可写入,判断上一次写入的缓存区的可写入标志,如果也不可写入,返回错误代码,如果上一次写入缓存区可以写入,先将缓存区可读取标志指向非上一次写入缓存区,然后将数据写入上一次写入缓存区;步骤2.3、更新缓冲区写入次数,将本次写入的缓存区的更新标志设置为更新后的缓冲区写入次数,将缓存区可读取标志指向本次写入的缓存区,返回写入字节数,写入完成;所述双缓存读取操作操作包含以下步骤:步骤3.1、判断待读取数据是否超出单个缓存区能处理的最大值,若超出则返回错误代码,否则执行下一步;步骤3.2、判断读取任务与写入任务的优先级高低,若读取任务优先级高于
\t或等于写入任务,则判断缓存区可读标志所指向的缓存区的更新状态是否大于本次读取任务id对应的读取更新标志判断数据是否有更新,若大于先更新读取更新标志,然后读取缓存区可读标志所...

【专利技术属性】
技术研发人员:徐克张国全李奎
申请(专利权)人:中国航空无线电电子研究所
类型:发明
国别省市:上海;31

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

1