一种任务间队列通信方法及装置的制造方法

文档序号:9452953阅读:348来源:国知局
一种任务间队列通信方法及装置的制造方法
【技术领域】
[0001]本发明实施例涉及数据通信的技术领域,尤其涉及一种任务间队列通信方法及装置。
【背景技术】
[0002]基于操作系统的应用软件开发,由于操作系统的调度,都会面临任务间数据通信和同步的问题。Windows环境下比较成熟的任务间通信技术就是使用临界区、互斥量、信号量、消息队列等现有的任务间通信与同步的技术。以现有技术的消息队列为例,一般具备如下模块:
[0003]消息实体缓冲模块,用于存储若干条目的消息内容;
[0004]消息队列信号量模块,用于计量队列缓冲区所包含的消息数目;
[0005]消息队列互斥量模块,用于保证队列同一时刻只能被同一任务(线程)访问修改的互斥机制。
[0006]现有消息队列的技术一般提供以下操作步骤:
[0007]步骤一:线程向消息队列插入消息,先等待互斥量模块的所有权,获得队列访问权限后,把待插入的消息内容放置到队列尾部,然后把信号量模块的计数加一,最后释放互斥量模块的所有权,至此一次插入消息的操作即完成;
[0008]步骤二:提取消息,先等待消息队列信号量模块有信号,等待成功后信号计数减一,然后等待互斥量模块的所有权,获得访问权限后,把队列首部的消息移除,然后释放互斥量模块的所有权,至此一次提取消息的操作即完成。
[0009]但是,因为目前的互斥量、信号量技术是在Windows环境下开发的,仅使用于大型软件,并不适用在嵌入式软件中开发的线程通信机制,因此,如何在简单的小型嵌入式系统中改善微处理器软件开发中经常遇到的任务间数据通信与同步的问题,使得能够灵活、简单而又有效的实现任务间通信与同步的功能是有待解决的问题。

【发明内容】

[0010]本发明实施例的目的在于提出一种任务间队列通信方法及装置,能够解决如何提供一种适用于小型MCU软件开发的任务之间数据通信方法的问题。
[0011]为达此目的,本发明实施例采用以下技术方案:
[0012]第一方面,任务间队列通信方法,所述方法包括:
[0013]分配连续的内存作为任务间通信报文的报文队列缓冲区;
[0014]为报文队列中的每个报文添加一用于标记所述报文有效性的报文标记;
[0015]根据所述报文队列中报文的有效性控制报文插入操作以及报文读取操作。
[0016]优选地,根据所述报文队列中报文的有效性控制报文插入操作以及报文读取操作的步骤,包括:
[0017]采用循环迭代方式在所述报文队列缓冲区插入或提取所述报文。
[0018]优选地,所述采用循环迭代方式在所述报文队列缓冲区插入或提取所述报文的步骤包括:
[0019]向所述报文队列缓冲区插入或提取报文时,将用于指示报文插入位置的插入迭代指针或用于指示报文提取位置的提取迭代指针向后移位,当指针已移动至所述报文队列缓冲区的队末时则将所述指针移动至报文队列缓冲区的队首。
[0020]优选地,所述向所述报文队列缓冲区插入或提取报文时,将用于指示报文插入位置的插入迭代指针或用于指示报文提取位置的提取迭代指针向后移位的步骤,包括:
[0021]根据所述报文插入迭代指针所指示位置的报文对应的报文标记来判断所述报文有效性;
[0022]若所述报文无效,则将待插入的报文实体拷贝至该位置,并且标记这条报文为有效,然后将所述报文插入迭代指针移动至下一位置;
[0023]若所述报文有效则报文队列缓冲区无法再次插入报文。
[0024]优选地,所述向所述报文队列缓冲区插入或提取报文时,将用于指示报文插入位置的插入迭代指针或用于指示报文提取位置的提取迭代指针向后移位的步骤,包括:
[0025]根据所述报文提取迭代指针所指示位置的报文对应的报文标记来判断所述报文有效性;
[0026]若所述报文有效则读取所述报文,并标记所述报文为无效,再将所述报文提取迭代指针移动至下一位置;
[0027]若所述报文无效,则说明报文队列缓冲区无有效报文。
[0028]第二方面,一种任务间队列通信装置,所述装置包括:
[0029]分配模块,用于分配连续的内存作为任务间通信报文的报文队列缓冲区;
[0030]添加模块,用于为报文队列中的每个报文添加一用于标记所述报文有效性的报文标记;
[0031]控制模块,用于根据所述报文队列中报文的有效性控制报文插入操作以及报文读取操作。
[0032]优选地,所述控制模块,包括:
[0033]迭代模块,用于采用循环迭代方式在所述报文队列缓冲区插入或提取所述报文。
[0034]优选地,所述迭代模块,包括:
[0035]移位单元,用于向所述报文队列缓冲区插入或提取报文时,将用于指示报文插入位置的插入迭代指针或用于指示报文提取位置的提取迭代指针向后移位;
[0036]移动单元,用于当指针已移动至所述报文队列缓冲区的队末时则将所述指针移动至报文队列缓冲区的队首。
[0037]优选地,所述移位单元,用于:
[0038]根据所述报文插入迭代指针所指示位置的报文对应的报文标记来判断所述报文有效性;
[0039]若所述报文无效,则将待插入的报文实体拷贝至该位置,并且标记这条报文为有效,然后将所述报文插入迭代指针移动至下一位置;
[0040]若所述报文有效则报文队列缓冲区无法再次插入报文。
[0041]优选地,所述移位单元,用于:
[0042]根据所述报文提取迭代指针所指示位置的报文对应的报文标记来判断所述报文有效性;
[0043]若所述报文有效则读取所述报文,并标记所述报文为无效,再将所述报文提取迭代指针移动至下一位置;
[0044]若所述报文无效,则说明报文队列缓冲区无有效报文。
[0045]本发明实施例通过分配连续的内存作为任务间通信报文的报文队列缓冲区;为报文队列中的每个报文添加一用于标记所述报文有效性的报文标记;根据所述报文队列中报文的有效性控制报文插入操作以及报文读取操作,从而没有使用大型操作系统的内核对象,只是给队列每个元素添加了一个成员:报文有效标记,以此来互斥队列的插入和移除操作,同样能实现任务间的通信及同步;而且这种方法在小型的MCU软件开发中易于实现,代码规模小,以此简化了许多嵌入式软件面临的任务间数据同步操作。
【附图说明】
[0046]图1是本发明实施例任务间队列通信的方法第一实施例的方法流程图;
[0047]图2是本发明实施例任务间队列通信的方法第二实施例的方法流程图;
[0048]图3是本发明实施例任务间队列通信的装置的功能模块示意图;
[0049]图4是本发明实施例控制模块303的功能模块示意图;
[0050]图5是本发明实施例迭代模块401的功能模块示意图;
[0051]图6是本发明实施例任务间队列通信的装置的功能模块示意图。
【具体实施方式】
[0052]下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。
[0053]实施例一
[0054]参考图1,图1是本发明实施例任务间队列通信的方法第一实施例的方法流程图。
[0055]在实施例一中,所述任务间队列通信的方法包括:
[0056]步骤101,分配连续的内存作为任务间通信报文的报文队列缓冲区;
[0057]具体的,缓冲区域可以为[0,N-1]的一维数组,该一维数组上存储的内容包括位置信息以及位置标识,该位置标识有以下三种情况:
[0058]第一种情况,仅存储位置的序号,例如,数组的序号位置为0,1,2,…
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1