实现嵌入式系统中任务间自适应通讯的方法

文档序号:7616951阅读:174来源:国知局
专利名称:实现嵌入式系统中任务间自适应通讯的方法
技术领域
本发明属于对计算机操作系统性能所作的改进,涉及的是一种实现嵌入式系统任务间自适应通讯的方法,具体是一种实现嵌入式系统和实时系统任务间消息发送的方法,尤其涉及一种实现嵌入式系统由通讯守护任务向其它任务发送消息的方法。
背景技术
一个典型的通讯系统通常为多CPU的分布式系统,每个单板上分布着若干个任务,执行特定的工作。从上层应用的角度来看,单板内的任务和单板间的任务通过消息的方式进行交互。对于板间通讯,设计者通常会设计一个通讯守护任务,负责从底层驱动接收板间来的数据,按照消息格式构造成消息后分发到各任务。同时也负责从本板上的各任务接收消息,转发给底层驱动,通过物理链路把消息发送到其它单板上的任务。
在一个通讯系统中,有些单板的板间通讯流量非常大,通讯守护任务被频繁调度,收到板间来的消息后,调用操作系统提供的消息发送接口把消息发送到目的任务。在操作系统内部,消息发送首先是把消息拷贝到目的任务的任务邮箱里,再释放信号量引起任务的调度,使处于阻塞态的目的任务跃迁到运行态。可见,通讯守护任务每发送一次消息,都会引起一次任务的切换。消息流量越大,任务切换的次数就越多,由此带来的系统开销就会越大。
有些单板会同时与其它多个单板存在板间的通讯,根据需求的不同,就会同时存在多种的通讯物理链路,例如10/100M以太网、232/485串口、双口RAM等,而采用的通讯协议也会不同,例如TCP/IP、HDLC、用户自定义的协议等。在这种情况下,一个单板就会有多个通讯守护任务,每个守护任务对应一种通讯协议。在实际情况中,有些单板间的通讯流量会一直维持很高,有些会一直很低,还有些会上下波动,流量的变化量可能会很大。通讯守护任务按照前面所述的转发消息的方式,对小流量的通讯方式,这种方式对系统性能不会有任何影响。但是,如前所述,大通讯流量会造成频繁的任务切换,导致任务处理消息的能力大大降低。对于通讯流量上下波动的情况,通讯任务的这种处理方式也不够灵活,造成不必要的CPU资源浪费。

发明内容
本发明的目的是提出了一种实现嵌入式系统任务间自适应通讯的方法,具体是一种实现嵌入式系统和实时系统任务间消息发送的方法,用于提高任务间的消息发送效率,特别针对嵌入式系统中的通讯守护任务向其它任务发送消息的情况。
本发明是这样实现的一种实现嵌入式系统任务间自适应通讯的方法,其特征在于还包括以下步骤定义消息缓冲队列,为通讯守护任务以外的每个任务定义一个消息缓冲队列;估算消息流量,估算出每种通讯方式的最大消息流量和平均消息流量的波动范围,根据消息流量确定消息的发送方式,估算方式采用预设定时器,并在定时时间内对收到的消息计数,即可初步确定该通信方式的消息流量。
所述消息缓冲队列为一个全局的消息结构指针数组,该数组的每个元素都是一个地址,用于存放某一个任务对应的消息缓冲队列头指针;在消息结构的定义中增加一个指向下一条消息结构的指针域,该指针在源任务向目的任务发送消息时被初始化为NULL。
当通信守护任务收到一条板间消息时,若发现目的任务对应的队列头指针为空,则将该消息指针直接赋给目的任务对应的队列头指针,并置其下一条消息指针域为空,否则将其赋给队列中最后一条消息的下一条消息指针域,同时置其下一条消息指针域为空。
所述估算消息流量为某种通讯方式的最大消息流量对本系统来说较小,并且平均消息流量不会随时间有较大的波动,则通讯守护任务在收到底层驱动传来的消息数据后,加上消息头,把该消息插入消息缓冲队列,并立刻调用操作系统提供的消息发送函数,把消息发送到目的任务。
所述估算消息流量为某种通讯方式的最大消息流量对本系统而言较大,并且平均消息流量不会随时间有较大的波动,则采用下述的步骤处理第一步.在通讯守护任务入口处申请一个定时器,用于定时地从通讯守护任务向其它任务发送消息,定时器时长由估算或经验获得;第二步.通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号,把消息插入对应的消息缓冲队列,此时并不调用操作系统提供的消息发送函数;第三步.定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务;第四步.目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
所述估算消息流量为某种通讯方式的平均消息流量随时间有较大的波动,则采用下述的步骤处理第一步.申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,初始定时器时长可以设置为10毫秒;第二步.声明一个全局的消息计数变量,用于记录一个定时周期内守护任务收到的消息数;第三步.通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号把消息插入对应的消息缓冲队列,并把消息计数变量递增,此时并不调用操作系统提供的消息发送函数;第四步.定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务;第五步.查看消息计数变量,并除以定时器时长转换为单位时间的消息个数,如果该值的变化不大,说明在这个定时周期内消息流量变化不大,此时定时器的时长保持不变,如果单位时间的消息数有较大的变化,定时器时长就需要调整,调整的策略是若消息流量显著增大,则将定时器时长增加50%,反之则减少50%,如此经过几次反复的收敛后所设定的定时器时长必然会符合该通信流量的要求;第六步.对消息变量计数值清零;第七步.目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
实现嵌入式系统任务间自适应通讯的方法,对应消息流量较小,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列;
第三步估算消息流量当通讯方式的最大消息流量对本系统来说较小,并且平均消息流量不会随时间有较大的波动,那么通讯守护任务在收到底层驱动传来的消息数据后,加上消息头,把该消息插入消息缓冲队列,并立刻调用操作系统提供的消息发送函数,把消息发送到目的任务。
所述实现嵌入式系统任务间自适应通讯的方法,对应消息流量较大,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列;第三步估算消息流量当通讯方式的最大消息流量对本系统而言较大,并且平均消息流量不会随时间有较大的波动,采用下述的步骤处理(1)在通讯守护任务入口处申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,定时器时长由估算或经验获得,(2)通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号,把消息插入对应的消息缓冲队列,此时并不调用操作系统提供的消息发送函数,(3)定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务,(4)目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
所述实现嵌入式系统任务间自适应通讯的方法,对应消息流量波动,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列,该队列的实现可以参见图2的详细描述;第三步估算消息流量当通讯方式的平均消息流量随时间有较大的波动,采用下述的步骤处理(1)申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,初始定时器时长可以设置为10毫秒,(2)声明一个全局的消息计数变量,用于记录一个定时周期内守护任务收到的消息数,(3)通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号把消息插入对应的消息缓冲队列,并把消息计数变量递增,此时并不调用操作系统提供的消息发送函数,(4)定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务,(5)查看消息计数变量,并除以定时器时长转换为单位时间的消息个数,如果该值的变化不大,说明在这个定时周期内消息流量变化不大,此时定时器的时长保持不变,如果单位时间的消息数有较大的变化,定时器时长就需要调整。调整的策略是若消息流量显著增大,则将定时器时长增加50%,反之则减少50%,如此经过几次反复的收敛后所设定的定时器时长必然会符合该通信流量的要求,(6)对消息变量计数值清零,(7)目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
所述从消息缓冲队列中取出消息后进行的处理在任务的入口函数中,进入一个无限循环,阻塞在操作系统提供的消息接收函数上,当有消息到来时,任务跃迁到运行态,从任务邮箱中取出消息,该消息数据为一个指针,指向本任务对应的消息缓冲队列头;任务从缓冲队列中取出第一条消息,并调整队列头指针,使之指向队列的下一条消息;随即任务转入消息处理例程,处理结束后,又从缓冲队列中取出下一条消息进行处理,如此循环直至缓冲队列中没有消息;任务又进入下一次循环。
本发明可根据消息流量,自适应调整通讯守护任务发送消息的频率,减少因消息发送、接收、任务切换所带来的开销。采用本发明所述的方法,可以减少通讯中任务切换的次数,大大提高通讯的效率和系统的整体性能。所述方法具有适用范围广、可靠性高、实时性强的特点。


图1是通常采用的通讯守护任务流程;图2是消息缓冲队列结构;图3是通讯守护任务在小通讯流量情况下的消息发送流程;图4是通讯守护任务在大通讯流量情况下的消息发送流程;图5是通讯守护任务在通讯流量波动情况下的消息发送流程;图6是目的任务接收消息流程。
具体实施例方式
下面结合附图对技术方案的实施作进一步的详细描述图1介绍了通常采用的通讯守护任务流程。在通讯守护任务的入口函数中,任务进入一个无限循环,调用操作系统提供的消息接收函数,等待从底层驱动传来的板间消息,此时通讯守护任务处于阻塞态。一旦有消息到来,通讯守护任务跃迁到运行态,从任务邮箱中取出收到的消息,根据该消息的目的任务,调用操作系统提供的消息发送函数,把消息转发到目的任务。然后通讯守护任务进入下一次循环。
图2介绍了消息缓冲队列的实现方法。在消息结构的定义中增加一个指向下一条消息结构的指针域,该指针在源任务向目的任务发送消息时被初始化为NULL。
申请一个全局的消息结构指针数组,该数组的每个元素都是一个地址,存放某一个任务对应的消息缓冲队列头指针。
当通信守护任务收到一条板间消息时,若发现目的任务对应的队列头指针为空,则将该消息指针直接赋给目的任务对应的队列头指针,并置其下一条消息指针域为空,否则将其赋给队列中最后一条消息的下一条消息指针域,同时置其下一条消息指针域为空。如此就形成了图2所示的消息缓冲队列。在此过程中完全无内存的拷贝过程,因此对系统的性能无任何影响。
图3介绍了通讯守护任务在小通讯流量情况下的消息发送流程。在通讯守护任务的入口函数中,任务进入一个无限循环,调用操作系统提供的消息接收函数,等待从底层驱动传来的板间消息,此时通讯守护任务处于阻塞态一旦有消息到来,通讯守护任务跃迁到运行态,从任务邮箱中取出收到的消息,根据该消息的目的任务,把消息插入到对应的缓冲队列尾,调用操作系统提供的消息发送函数,把消息发送到目的任务。然后通讯守护任务进入下一次循环。
图4介绍了通讯守护任务在大通讯流量情况下的消息发送流程。在通讯守护任务的入口函数中,首先申请一个定时器,该定时器用于定时地从通讯守护任务向其它任务发送消息,定时器时长由估算或经验获得。随即任务进入无限循环中,调用操作系统提供的消息接收函数,等待从底层驱动传来的板间消息,此时通讯守护任务处于阻塞态,一旦有消息到来,通讯守护任务跃迁到运行态,从任务邮箱中取出收到的消息,根据该消息的目的任务,把消息插入到对应的缓冲队列尾,然后通讯守护任务进入下一次循环。
定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务。
申请一个新的定时器,定时器时长保持不变。
图5介绍了通讯守护任务在通讯流量波动情况下的消息发送流程。首先申请一个全局的消息计数变量,用于记录一个定时周期内通讯守护任务收到的消息数。
在通讯守护任务的入口函数中,全局消息计数变量置零,申请一个定时器,该定时器用于定时地从通讯守护任务向其它任务发送消息,定时器初始时长由估算或经验获得。
任务进入一个无限循环,调用操作系统提供的消息接收函数,等待从底层驱动传来的板间消息,此时通讯守护任务处于阻塞态。一旦有消息到来,通讯守护任务跃迁到运行态,从任务邮箱中取出收到的消息,根据该消息的目的任务,把消息插入到对应的缓冲队列尾,并且把消息变量计数变量递增,然后通讯守护任务进入下一次循环。
定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务。
查看消息计数变量,如果该变量的值变化不大,说明在这个定时周期内消息流量变化不大,此时定时器的时长保持不变。如果消息计数变量的值有较大的变化,定时器时长就需要调整。定时器时长的调整策略由用户决定。
申请一个新的定时器,定时器时长为调整以后的值。
消息变量计数变量清零。
图6介绍了目的任务接收消息的流程。在任务的入口函数中,进入一个无限循环,阻塞在操作系统提供的消息接收函数上,当有消息到来时,任务跃迁到运行态,从任务邮箱中取出消息,该消息数据为一个指针,指向本任务对应的消息缓冲队列头。任务从缓冲队列中取出第一条消息,并调整队列头指针,使之指向队列的下一条消息。随即任务转入消息处理例程,处理结束后,又从缓冲队列中取出下一条消息进行处理,如此循环直至缓冲队列中没有消息。任务又进入下一次循环。
权利要求
1.一种实现嵌入式系统中任务间自适应通讯的方法,其特征在于还包括以下步骤定义消息缓冲队列,为通讯守护任务以外的每个任务定义一个消息缓冲队列;估算消息流量,估算出每种通讯方式的最大消息流量和平均消息流量的波动范围,根据消息流量确定消息的发送方式,估算方式采用预设定时器,并在定时时间内对收到的消息计数,即可初步确定该通信方式的消息流量。
2.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于所述消息缓冲队列为一个全局的消息结构指针数组,该数组的每个元素都是一个地址,用于存放某一个任务对应的消息缓冲队列头指针;在消息结构的定义中增加一个指向下一条消息结构的指针域,该指针在源任务向目的任务发送消息时被初始化为NULL。
3.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于当通信守护任务收到一条板间消息时,若发现目的任务对应的队列头指针为空,则将该消息指针直接赋给目的任务对应的队列头指针,并置其下一条消息指针域为空,否则将其赋给队列中最后一条消息的下一条消息指针域,同时置其下一条消息指针域为空。
4.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于所述估算消息流量为某种通讯方式的最大消息流量对本系统来说较小,并且平均消息流量不会随时间有较大的波动,则通讯守护任务在收到底层驱动传来的消息数据后,加上消息头,把该消息插入消息缓冲队列,并立刻调用操作系统提供的消息发送函数,把消息发送到目的任务。
5.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于所述估算消息流量为某种通讯方式的最大消息流量对本系统而言较大,并且平均消息流量不会随时间有较大的波动,则采用下述的步骤处理第一步.在通讯守护任务入口处申请一个定时器,用于定时地从通讯守护任务向其它任务发送消息,定时器时长由估算或经验获得;第二步.通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号,把消息插入对应的消息缓冲队列,此时并不调用操作系统提供的消息发送函数;第三步.定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务;第四步.目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
6.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于所述估算消息流量为某种通讯方式的平均消息流量随时间有较大的波动,则采用下述的步骤处理第一步.申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,初始定时器时长可以设置为10毫秒;第二步.声明一个全局的消息计数变量,用于记录一个定时周期内守护任务收到的消息数;第三步.通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号把消息插入对应的消息缓冲队列,并把消息计数变量递增,此时并不调用操作系统提供的消息发送函数;第四步.定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务;第五步.查看消息计数变量,并除以定时器时长转换为单位时间的消息个数,如果该值的变化不大,说明在这个定时周期内消息流量变化不大,此时定时器的时长保持不变,如果单位时间的消息数有较大的变化,定时器时长就需要调整,调整的策略是若消息流量显著增大,则将定时器时长增加50%,反之则减少50%,如此经过几次反复的收敛后所设定的定时器时长必然会符合该通信流量的要求;第六步.对消息变量计数值清零;第七步.目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
7.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列;第三步估算消息流量当通讯方式的最大消息流量对本系统来说较小,并且平均消息流量不会随时间有较大的波动,那么通讯守护任务在收到底层驱动传来的消息数据后,加上消息头,把该消息插入消息缓冲队列,并立刻调用操作系统提供的消息发送函数,把消息发送到目的任务。
8.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列;第三步估算消息流量当通讯方式的最大消息流量对本系统而言较大,并且平均消息流量不会随时间有较大的波动,采用下述的步骤处理(1)在通讯守护任务入口处申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,定时器时长由估算或经验获得,(2)通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号,把消息插入对应的消息缓冲队列,此时并不调用操作系统提供的消息发送函数,(3)定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务,(4)目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
9.如权利要求1所述实现嵌入式系统中任务间自适应通讯的方法,包括下列步骤第一步创建通讯守护任务根据本系统与外界通讯方式的种类,为每种通讯方式创建一个通讯守护任务,并为每个守护任务创建一个任务邮箱;第二步定义消息缓冲队列为通讯守护任务以外的每个任务定义一个消息缓冲队列;第三步估算消息流量当通讯方式的平均消息流量随时间有较大的波动,采用下述的步骤处理(1)申请一个定时器,该定时器用于定时地从守护任务向其它任务发送消息,初始定时器时长可以设置为10毫秒,(2)声明一个全局的消息计数变量,用于记录一个定时周期内守护任务收到的消息数,(3)通讯守护任务收到底层驱动传来的消息数据后,根据该消息的目的任务号把消息插入对应的消息缓冲队列,并把消息计数变量递增,此时并不调用操作系统提供的消息发送函数,(4)定时器到时后,遍历每个消息缓冲队列,如果队列中有消息,则把该队列的头指针发送到目的任务,(5)查看消息计数变量,并除以定时器时长转换为单位时间的消息个数,如果该值的变化不大,说明在这个定时周期内消息流量变化不大,此时定时器的时长保持不变,如果单位时间的消息数有较大的变化,定时器时长就需要调整。调整的策略是若消息流量显著增大,则将定时器时长增加50%,反之则减少50%,如此经过几次反复的收敛后所设定的定时器时长必然会符合该通信流量的要求,(6)对消息变量计数值清零,(7)目的任务收到该消息后,依次从消息缓冲队列中取出消息,进行处理。
10.如权利要求7至9中任意一项所述实现嵌入式系统中任务间自适应通讯的方法,其特征在于所述从消息缓冲队列中取出消息后进行的处理在任务的入口函数中,进入一个无限循环,阻塞在操作系统提供的消息接收函数上,当有消息到来时,任务跃迁到运行态,从任务邮箱中取出消息,该消息数据为一个指针,指向本任务对应的消息缓冲队列头;任务从缓冲队列中取出第一条消息,并调整队列头指针,使之指向队列的下一条消息;随即任务转入消息处理例程,处理结束后,又从缓冲队列中取出下一条消息进行处理,如此循环直至缓冲队列中没有消息;任务又进入下一次循环。
全文摘要
本发明属于对计算机操作系统性能所作的改进,具体涉及一种实现嵌入式系统任务间自适应通讯的方法,尤其涉及一种实现嵌入式系统由通讯守护任务向其它任务发送消息的方法。本发明所述方法包括为通讯守护任务以外的每个任务定义一个消息缓冲队列;估算出每种通讯方式的最大消息流量和平均消息流量的波动范围,根据消息流量确定消息的发送方式。本发明可根据消息流量,自适应调整通讯守护任务发送消息的频率,减少因消息发送、接收、任务切换所带来的开销。采用本发明所述的方法,可以减少通讯中任务切换的次数,大大提高通讯的效率和系统的整体性能。所述方法具有适用范围广、可靠性高、实时性强的特点。
文档编号H04L29/02GK1571376SQ03139900
公开日2005年1月26日 申请日期2003年7月16日 优先权日2003年7月16日
发明者张华强, 杨新, 蒋鲲鹏, 危才华, 缪敬, 王陈, 芦东昕 申请人:深圳市中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1