掌桥专利:专业的专利平台
掌桥专利
首页

一种基于嵌入式实时操作系统的定时器管理方法

文献发布时间:2024-04-18 19:58:26


一种基于嵌入式实时操作系统的定时器管理方法

技术领域

本发明属于网络通信领域,具体涉及一种基于嵌入式实时操作系统的定时器管理方法。

背景技术

面对工业生产过程中生产工艺的复杂性和动态性,以及业务协同化的新态势,使控制器具备自学习能力,解决靠近现场端的实时感知、实时控制和智能数据分析,成为现代控制系统新的发展趋势,因此实时嵌入式网络设备在现代控制系统中占有越来越重要的地位。

在实时嵌入式网络设备中,各种通信协议进行调度数据的发送和接收、通信协议栈的启动与停止、实时操作系统中系统任务的延时、同步和切换等活动都需要准确且高速的定时器提供定时服务,目前嵌入式操作系统所提供的软件定时器虽然可以满足实际功能对定时器数量的需求,但其定时精度较低且无法实现快速切换响应;而实时嵌入式网络设备中的硬件定时器可以提供高精度定时服务,且定时器切换响应速度可以满足实际功能需求,但其数量稀少无法满足实际应用过程中对定时器服务数量的需求;因此在实时嵌入式网络设备中实现一种稳定高效的定时器管理算法,使其能够满足实时嵌入式网络设备对定时服务的需求是目前亟待解决的重要问题。

目前传统的定时器管理方法都存在其自身的局限和弊端,例如传统通过硬件定时器以固定的频率运行形成周期性的中断,然后以该周期性中断为定时基准源,通过软件计数的方式实现对周期性中断进行的累计,当达到预设值时,执行预设任务,从而提供数量众多的高精度定时服务,但该方法由于需要频繁进入与退出中断导致CPU的负担过重,并且由于每次进入与退出中断都会产生计时误差,当系统需要高并发、高超时率的定时器时,上述定时器管理方法无法满足系统的需求。

发明内容

针对现有技术中存在的上述不足之处,本发明要解决的技术问题是提供一种基于嵌入式实时操作系统的定时器管理方法,使其能够满足实时嵌入式网络设备对定时服务的需求。

本发明为实现上述目的所采用的技术方案:一种基于嵌入式实时操作系统的定时器管理方法,包括以下步骤:

步骤1:创建软件定时器管理列表、软件定时器超时时间管理列表、软件定时器服务函数管理列表;

步骤2:将嵌入式实时操作系统内各个线程所需的定时器服务,依次添加至软件定时器管理列表;

步骤3:遍历软件定时器管理列表,根据软件定时器管理列表中各个软件定时器的超时时间,按照超时时间从小到大的顺序将各个软件定时器插入至软件定时器超时时间管理列表;

步骤4:调用嵌入式实时操作系统中的定时器,使其按照软件定时器超时时间管理列表中的超时时间顺序执行定时服务;

步骤5:当定时器计数至超时时间后,将该超时时间对应的软件定时器服务函数,加载至软件定时器服务函数管理列表,并执行软件定时器超时时间管理列表中下一个超时时间;

步骤6:执行软件定时器服务函数管理列表内的软件定时器服务函数,返回步骤3。

所述软件定时器管理列表、软件定时器服务函数管理列表采用单向链表结构,所述软件定时器超时时间管理列表采用双向链表结构。

在步骤2中,支持系统内多线程访问软件定时器管理列表,允许任意线程将所需的定时器服务添加至软件定时器管理列表,同时通过调用嵌入式实时操作系统内的互斥信号量保护软件定时器管理列表,保证任意物理时刻只有一个线程对软件定时器管理列表进行操作。

在步骤2中,支持的定时器服务工作模式包括单次工作模式和循环工作模式。

在步骤4中,所述定时器为嵌入式实时操作系统所有定时器中精度最高的定时器。

在步骤5中,当定时器计数至超时时间,进入定时器定时中断服务函数后,将本次超时时间对应的软件定时器中断服务函数添加至软件定时器服务函数管理列表,并根据软件定时器服务函数的执行方式,通知相应的线程执行软件定时器服务函数,然后加载软件定时器超时时间管理列表中下一个超时时间并执行,同时删除软件定时器超时时间管理列表中已经执行完毕的软件定时器。

在步骤5中,支持的软件定时器服务函数执行方式包括中断回调触发执行方式、信号量触发执行方式以及消息队列触发执行方式。

在步骤6中,当执行完毕对应的软件定时器服务函数后,根据该软件定时器的定时服务工作模式执行不同的操作;

如果该软件定时器为单次工作模式,则将该软件定时器从软件定时器管理列表中删除,然后重新按顺序执行步骤3-步骤6;

如果软件定时器为循环工作模式,则计算下次的超时时间并将其重新添加至软件定时器管理列表中,然后重新按顺序步骤3-步骤6。

一种基于嵌入式实时操作系统的定时器管理装置,包括存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,用于当执行所述计算机程序时,实现一种基于嵌入式实时操作系统的定时器管理方法。

一种计算机可读存储介质,所述存储介质上存储有计算机程序,当所述计算机程序被处理器执行时,实现一种基于嵌入式实时操作系统的定时器管理方法。

本发明是一种基于嵌入式实时操作系统的定时器管理方法。它具有如下优点:

1.定时服务种类多。本发明方法支持包括单次工作模式和循环工作模式在内的常见定时器服务工作模式,并且提供中断回调触发执行方式、信号量触发执行方式以及消息队列触发执行方式在内的多种定时器服务函数执行方式,同时该方法支持多线程调用定时器服务,满足实际工程应用中绝大多数定时服务需求。

2.定时服务精度高。本发明方法通过选取高精度定时器作为定时计数源,保证时钟基准节拍的准确度,并且在高精度定时器的中断服务函数内只执行将本次超时时间对应的软件定时器中断服务函数添加至软件定时器服务函数管理列表、按照对应的方式通知相应的线程执行软件定时器服务函数以及加载软件定时器超时时间管理列表中下一个超时时间等必要且快速操作,避免了因在中断服务函数内执行过多的处理操作产生累积误差,影响定时服务精度,同时该方法基于嵌入式实时操作系统,利用嵌入式实时操作系统的实时性亦可有效保证定时服务的精度。

3.通用性强。本发明方法基于成熟的定时管理技术以及发展十分完善的嵌入式实时操作系统,实现该发明方法的技术难度小且技术发展成熟,系统实现的复杂度低,且该管理方法可以根据实际应用情况选择系统设备的高精度硬件定时器。或者选择实时嵌入式系统的高精度软件定时器,不需要改变硬件系统平台,通用性能强,易于实现。

附图说明

图1是本发明方法的整体流程图;

图2是本发明方法链表元素节点数据结构体示意图;

图3是本发明方法软件定时器管理列表链表指针数据结构体示意图;

图4是本发明方法软件定时器超时时间管理列表链表指针数据结构体示意图;

图5是本发明方法软件定时器服务函数管理列表链表指针数据结构体示意图。

具体实施方式

下面结合附图及实施示例对本发明做进一步的详细说明。

本发明涉及一种基于嵌入式实时操作系统的定时器管理方法。本方法首先创建软件定时器管理列表、软件定时器超时时间管理列表、软件定时器服务函数管理列表,然后将系统内各个线程所需的定时器服务,按顺序添加至软件定时器管理列表,接下来根据软件定时器超时时间大小按顺序排列软件定时器超时时间管理列表,并调用系统中的高精度定时器,使其按照软件定时器超时时间管理列表中的超时时间顺序执行定时服务;当高精度定时器计数至超时时间后,将对应的软件定时器服务函数加载至软件定时器服务函数管理列表,最后执行软件定时器服务函数管理列表内的软件定时器服务函数,实现系统内各个线程所需的定时器服务。本发明方法实现了一种稳定高效的定时器管理算法,使整体设备系统中即使缺少硬件高精度定时器,也能够满足实时嵌入式网络设备数量众多、种类多样的定时服务需求,具有广泛的应用前景。

一种基于嵌入式实时操作系统的定时器管理方法,包括以下步骤:

步骤Step1:创建软件定时器管理列表、软件定时器超时时间管理列表、软件定时器服务函数管理列表;

步骤Step2:将系统内各个线程所需的定时器服务,按顺序添加至软件定时器管理列表;

步骤Step3:遍历软件定时器管理列表,根据列表中各个软件定时器的超时时间,按照超时时间从小到大的顺序将各个软件定时器插入至软件定时器超时时间管理列表;

步骤Step4:调用系统中的高精度定时器,使其按照软件定时器超时时间管理列表中的超时时间顺序执行定时服务;

步骤Step5:当高精度定时器计数至超时时间后,将该超时时间对应的软件定时器服务函数,加载至软件定时器服务函数管理列表,并执行软件定时器超时时间管理列表中下一个超时时间;

步骤Step6:执行软件定时器服务函数管理列表内的软件定时器服务函数,当定时器服务函数管理列表内所有的软件定时器服务函数执行完毕后,执行完毕后重新按顺序执行步骤Step3-Step6;

在步骤Step1中,创建的软件定时器管理列表、软件定时器服务函数管理列表采用单向链表结构,软件定时器超时时间管理列表采用双向链表结构。

在步骤Step2中,支持系统内多线程访问软件定时器管理列表,允许任意线程将所需的定时器服务添加至软件定时器管理列表,同时通过调用嵌入式实时操作系统内的互斥信号量保护软件定时器管理列表,保证任意物理时刻只有一个线程对软件定时器管理列表进行操作。

在步骤Step2中,支持的定时器服务工作模式包括单次工作模式和循环工作模式。

在步骤Step3中,本管理方法建立单独的线程管理与维护软件定时器超时时间管理列表,保证软件定时器插入至软件定时器超时时间管理列表的效率,避免在将软件定时器插入软件定时器超时时间管理列表的过程中花费过多时间,导致定时服务产生较大误差。

在步骤Step4中,本管理方法调用的高精度定时器即可以为系统设备的高精度硬件定时器,亦可以为嵌入式实时操作系统中所提供的高精度系统定时器。

在步骤Step5中,当高精度定时器计数至超时时间,进入高精度定时器定时中断服务函数后,将本次超时时间对应的软件定时器中断服务函数添加至软件定时器服务函数管理列表,并根据软件定时器服务函数的执行方式,按照对应的方式通知相应的线程执行软件定时器服务函数,然后加载软件定时器超时时间管理列表中下一个超时时间并执行,同时删除软件定时器超时时间管理列表中已经执行完毕的软件定时器。

在步骤Step5中,本管理方法支持的软件定时器服务函数执行方式包括中断回调触发执行方式、信号量触发执行方式以及消息队列触发执行方式。

在步骤Step6中,当执行完毕对应的软件定时器服务函数后,根据该软件定时器的定时服务工作模式执行不同的操作,如果该软件定时器为单次工作模式,则将该软件定时器从软件定时器管理列表中删除,然后重新按顺序执行步骤Step3-Step6;如果软件定时器为循环工作模式,则计算下次的超时时间并将其重新添加至软件定时器管理列表中,然后重新按顺序执行步骤Step3-Step6。

图1是本发明方法的整体流程图,该方法首先在设备系统内创建软件定时器管理列表、软件定时器超时时间管理列表以及软件定时器服务函数管理列表,然后将系统内各线程所需的定时服务,按顺序添加入软件定时器管理列表内,接下来系统遍历软件定时器管理列表,根据各个软件定时器设定的超时时间按照从小到大的顺序插入至软件定时器超时时间管理列表;调用系统内的高精度定时器,使其按照软件定时器超时时间管理列表中的超时时间逐一执行定时计数,当高精度定时器计数至超时时间进入高精度定时器中断服务函数后,将该超时时间对应的软件定时器服务函数,加载至软件定时器服务函数管理列表,并执行软件定时器超时时间管理列表中下一个超时时间,最后执行软件定时器服务管理函数管理列表内的软件定时器服务函数,从而实现系统内各线程所需的定时服务。下面将结合本方法在实际应用中的具体实现过程对上述各个步骤进行具体介绍。

首先在设备内的实时嵌入式系统中创建软件定时器管理列表SoftTimerLis t、软件定时器超时时间管理列表SoftArmedTimerList以及软件定时器服务函数管理列表CallBackList,其中软件定时器管理列表SoftTimerList和软件定时器服务函数管理列表CallBackList采用单向链表结构,软件定时器超时时间管理列表SoftArmedTimerList采用双向链表结构。在本方法具体实现过程中为了简化各个链表之间元素节点插入与删除操作的复杂度,提高本方法各个操作步骤的执行速度,各个链表内其元素节点结构采用如图2所示相同的数据结构体,虽然该实现方式会导致每个链表内元素节点的结构体成员存在与本链表管理无关的成员,增加链表所需的存储空间,但其可以减少因执行过多复杂操作导致的延时误差,提高整体软件定时器的定时精度,并降低本方法实现的复杂程度;同时随着实时嵌入式设备的不断发展,设备内的存储空间已经越来越充裕,与本实现过程浪费的存储空间相比,其带来的收益更加显而易见。

图2所示链表元素节点数据结构体tHrtimer的结构体成员m_signalling表示软件定时器服务函数执行方式,本方法实现过程中提供中断回调触发执行方式、信号量触发执行方式以及消息队列触发执行方式三种执行方式,数据结构体成员m_Mode表示软件定时器的工作方式,本方法实现过程支持单次工作模式和循环工作模式。

链表元素节点数据结构体tHrtimer的结构体成员m_signalling表示软件定时器服务函数执行方式如下:

typedef struct tHrtimer

{

timer_t m_iTimerId;定时器ID号

struct tHrtimer*m_pNext;软件定时器管理列表中下一个软件定时器

struct tHrtimer*m_pPrevArmed;软件定时器超时时间管理列表中下一个超时时间

struct tHrtimer*m_pNextArmed;软件定时器超时时间管理列表中上一个超时时间

struct tHrtimer*m_pNextCallback;软件定时器服务函数管理列表中下一个服务函数

tHrtimerSig m_signalling;软件定时器服务函数执行方式

tHrtimerMode m_Mode;软件定时器工作模式

struct timespec m_timeout;软件定时器超时时间

pTimerFunc*m_Func;软件定时器服务函数指针

eTimerState m_state;软件定时器运行状态

}tHrtimer;

同时为了方便实现对上述三个链表进行插入、删除、遍历、排序等访问操作,本方法在具体实现过程中分别为上述三个链表创建软件定时器管理列表链表指针pTimersList、软件定时器超时时间管理列表链表指针pArmedTimersList以及软件定时器服务函数管理列表链表指针pCallbackList,上述指针分别指向在当前时刻系统所访问的链表位置,三个链表指针的具体数据结构分别如图3、图4和图5所示,其中每个链表指针的数据结构体中都含有线程ID的结构体成员,该结构体成员表示系统调用链表指针对链表进行操作的线程ID号,本方法通过分别开辟专门线程对各个进行单独访问操作,保证对各个链表进行操作维护的效率。

三个链表指针的具体数据结构分别如下:

typedef struct pTimersList

{

int m_TaskID;线程ID号

tHrtimer*m_pTimers;当前软件定时器管理列表中所指位置

tHrtimer*m_pFirstTimer;软件定时器管理列表中头元素节点

tHrtimer*m_pLastTimer;软件定时器管理列表中尾元素节点

}pTimersList;

typedef struct pArmedTimersList

{

int m_TaskID;线程ID号

tHrtimer*m_pArmedTimers;当前软件定时器超时时间管理列表中所指位置

tHrtimer*m_pFirstArmedTimer;软件定时器超时时间管理列表中头元素节点

tHrtimer*m_pLastArmedTimer;软件定时器超时时间管理列表中尾元素节点

}pArmedTimersList;

typedef struct pCallbackList

{

int m_TaskID;线程ID号

tHrtimer*m_pCallback;当前软件定时器服务函数管理列表中所指位置

tHrtimer*m_pFirstCallback;软件定时器服务函数管理列表中头元素节点

tHrtimer*m_pLastCallback;软件定时器服务函数管理列表中尾元素节点

}pCallbackList;

然后将系统内各线程所需的定时服务以图2所示的链表元素节点结构体形式插入至软件定时器管理列表中,以线程A所需的定时服务Timer_A为例,其所需的工作模式为单次工作模式,定时时间为T

当负责对软件定时器管理列表SoftTimerList进行操作维护的线程检测到有新的元素节点添加入软件定时器管理列表SoftTimerList后,将新添加的元素节点传递给负责管理维护软件定时器超时时间管理列表SoftArmedTimerList的线程,该线程会根据软件定时器的超时时间将其按顺序插入至软件定时器超时时间管理列表SoftArmedTimerList中正确的位置,由于需要频繁对软件定时器超时时间管理列表SoftArmedTimerList进行遍历、排序、插入、删除等操作,且执行上述操作的时间长短会严重影响定时器定时精度,因此在本方法实现过程中采用双向链表的数据结构实现软件定时器超时时间管理列表SoftArmedTimerList,相比于单向链表,对双向链表进行遍历与排序操作的时间更短,可以很大程度上降低执行上述操作所造成的延时,提高整体软件定时器的定时精度。

如果系统设备中具有高精度的硬件定时器,则选择其按顺序执行软件定时器超时时间管理列表SoftArmedTimerList中的超时时间,如果系统设备无法提供高精度的硬件定时器,也可以采用设备中运行的实时嵌入式系统所提供的系统定时器执行软件定时器超时时间管理列表SoftArmedTimerList中的超时时间,在本方法实现过程中系统设备不具备高精度硬件定时器。因此选择设备运行的实时嵌入式系统所提供的高精度系统定时器按顺序执行上述列表中的超时时间。

当高精度定时器定时计数至超时时间,进入高精度定时器中断服务函数后,按顺序执行下述操作:

1)将对应的软件定时器服务函数加载至软件定时器服务函数管理列表;

2)根据软件定时器服务函数的执行方式,按照对应的方式通知相应的线程执行软件定时器服务函数;

3)加载软件定时器超时时间管理列表SoftArmedTimerList中下一个软件定时器超时时间;

4)删除软件定时器超时时间管理列表SoftArmedTimerList中已经计数完毕的软件定时器元素节点;

在本例中软件定时器服务函数的执行方式为信号量触发方式,因此在高精度定时器中断服务函数中会释放一个信号量通知负责对软件定时器服务函数管理列表CallBackList的线程执行加载至软件定时器服务函数管理列表中的软件定时服务函数;当负责对软件定时器服务函数管理列表CallBackList进行操作维护的线程检测到高精度定时器中断服务函数传递的触发信号后,则按照链表中的顺序执行相应的服务函数,由于将执行操作复杂的服务函数从高精度定时器中断服务函数移动到专门的线程进行执行,减少了高精度定时器中断服务函数内的执行时间,降低了高精度定时器频繁进入中断服务函数执行所产生的累计误差,从而保证最终提供的软件定时服务的定时精度。

当负责对软件定时器服务函数管理列表CallBackList进行操作维护的线程执行完毕对应的软件定时器服务函数后,该线程会根据软件定时器的定时服务工作模式执行不同的操作,如果该软件定时器为单次工作模式,则通知负责对软件定时器管理列表SoftTimerList进行操作维护的线程,将该软件定时器从软件定时器管理列表中删除;如果软件定时器为循环工作模式,则计算下次的超时时间并将其写入该软件定时器元素节点中的对应位置,然后将该软件定时器元素节点传递给负责对软件定时器管理列表SoftTimerList进行操作维护的线程,负责对软件定时器管理列表SoftTimerList进行操作维护的线程收到后将链表内旧的软件定时器元素节点删除,将新的软件定时器元素节点添加至链表尾部。

相关技术
  • 基于OSEK嵌入式实时操作系统的非周期定时器驻留机制
  • 基于OSEK嵌入式实时操作系统的非周期定时器驻留机制
技术分类

06120116489918