CN104597820A - 一种扩展单片机硬件定时器的方法 - Google Patents
一种扩展单片机硬件定时器的方法 Download PDFInfo
- Publication number
- CN104597820A CN104597820A CN201510071478.8A CN201510071478A CN104597820A CN 104597820 A CN104597820 A CN 104597820A CN 201510071478 A CN201510071478 A CN 201510071478A CN 104597820 A CN104597820 A CN 104597820A
- Authority
- CN
- China
- Prior art keywords
- timing information
- value
- message
- timing
- timer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/042—Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
- G05B19/0426—Programming the control sequence
Abstract
本发明公开了一种扩展单片机硬件定时器的方法,与基于消息队列的单片机操作系统联合使用,可为不同的任务进程提供任务所需要的定时器触发消息。本发明中先分配一个存放定时信息的数组和一个作为基准时间的基准时间变量;再使用一个硬件定时器产生一定周期的中断;最后在中断服务程序中完成定时器的扩展。在每次调用中断服务程序时,基准时间变量加1,然后与各定时值进行比对,如相等,则发送定时信息指定的消息。本发明的有益效果是:该方法只占用1个硬件定时器,编写软件代码结构简洁、运行高效,在基于消息队列的单片机操作系统中进行时间相关的多任务设计时,使用灵活,能够满足各任务进程对时间控制的需要。
Description
技术领域
本发明涉及一种扩展单片机硬件定时器的方法。
背景技术
在单片机软件设计中,经常要按时间顺序的发展设计任务进程,而标准型号的51系列单片机只有4个硬件定时器,部分定时器还会被一些外设部件占用,如UART等,可用作时间控制的定时器是非常少的。如果在硬件定时器中断中直接处理进程任务,则会使软件结构显得杂乱,为软件维护带来困难。
发明内容
本发明的目的在于克服现有技术的不足,提供一种扩展单片机硬件定时器的方法,本发明与基于消息队列的单片机操作系统联合使用,可为不同的任务进程提供任务所需要的定时器触发消息,运行效率更高,使用更加灵活。
本发明的目的是通过以下技术方案来实现的:一种扩展单片机硬件定时器的方法,它包括以下步骤:
S1:定义定时信息结构类型,定时信息类型为包括时间值变量和消息值变量的结构类型,约定消息值变量为0时表示定时信息无效;
S2:定义定时信息数组,用于存放定时信息,在初始化定时信息数组时,将每个组元的消息值变量设为0;
S3: 定义基准时间变量,用于在硬件定时器中断服务程序中加1,作为整个定时器扩展的基准时间;
S4:设置硬件定时器的中断周期,使硬件定时器按一定周期调用中断服务程序;
S5:使能定时器的函数,参数包括定时值和消息值,函数程序包括以下子步骤:
S51:查找定时信息数组是否存在参数消息值的定时信息,如果存在则用新的定时信息覆盖原有的定时信息,如果不存在则查找一个消息值为0的定时信息;
S52:判断函数参数的定时值是否为0,如果不为0,则将函数参数的定时值与基准时间变量相加,并将相加的结果存入步骤S51找到的定时信息的时间值变量中,将消息值存入步骤S51找到的定时信息的消息值变量中;如果为0,则将步骤S51找到的定时信息中的消息值清0;
S6:为硬件定时器编写中断服务程序;中断服务程序包括以下子步骤:
S61:基准时间变量加1;
S62:循环比对定时信息数组中消息值不为0的定时信息的时间值,如果时间值和基准时间相等,则发送该定时信息指定的消息,然后设置定时信息消息值为0来释放该定时信息。
根据步骤S1、S2、S3所述,定义了扩展定时器所需要的数据结构,其包括数据类型为结构的定时信息,数据类型为定时信息的数组,基准时间变量。定时信息数组的组元数量根据整个软件系统同时用到定时器的最大数量确定。
根据步骤S4所述,设置单片机的一个硬件定时器间隔一个周期产生一次中断,一个周期为1毫秒。
根据步骤S5所述,为各任务进程使用定时器设计一个函数,参数包括定时值和消息值。如果参数中的定时值不为零,则表示参数中的定时值时间到时,向消息队列中存入一个参数消息值定义的消息;如果参数中的定时值为零,则表示释放定时信息中消息值为参数指定消息值的定时信息(将定时信息的消息值设为0)。该函数可多次调用来为不同任进程设置一个定时器。
根据步骤S6所述,在硬件定时器产生中断时,硬件自动调用中断服务程序,每次进入中断服务程序时,基准时间变量增量,然后循环比对所有的定时信息,当定时信息的消息值不为零且时间值与基准时间值相等时,向消息队列中存入定时信息中指定的消息值。
本发明的有益效果是:该方法只占用1个硬件定时器,编写软件代码结构简洁、运行高效,在基于消息队列的单片机操作系统中进行时间相关的多任务设计时,使用灵活,能够满足各任务进程对时间控制的需要。
附图说明
图1为使能定时器函数程序流程图;
图2为硬件定时器中断服务程序流程图。
具体实施方式
下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
一种扩展单片机硬件定时器的方法,它包括以下步骤:
S1:定义定时信息结构类型,定时信息类型为包括时间值变量和消息值变量的结构类型,约定消息值变量为0时表示定时信息无效;
S2:定义定时信息数组,用于存放定时信息。在初始化定时信息数组时,将每个组元的消息值变量设为0;
S3: 定义基准时间变量,用于在硬件定时器中断服务程序中加1,作为整个定时器扩展的基准时间;
S4:设置硬件定时器的中断周期,使硬件定时器按一定周期调用中断服务程序;
S5:使能定时器的函数,参数包括定时值和消息值,程序流程如图1所示,函数程序包括以下子步骤:
S51:查找定时信息数组是否存在参数消息值的定时信息,如果存在则用新的定时信息覆盖原有的定时信息,如果不存在则查找一个消息值为0的定时信息;
S52:判断函数参数的参数定时值是否为0,如果不为0,则将函数参数的定时值与基准时间变量相加,并将相加的结果存入步骤S51找到的定时信息的时间值变量中,将消息值存入步骤S51找到的定时信息的消息值变量中;如果为0,则将步骤S51找到的定时信息中的消息值清0;
S6:为硬件定时器编写中断服务程序,程序流程如图2所示,中断服务程序包括以下子步骤:
S61:基准时间变量加1;
S62:循环比对定时信息数组中消息值不为0的定时信息的时间值,如果时间值和基准时间相等,则发送该定时信息指定的消息,然后设置定时信息消息值为0来释放该定时信息。
根据步骤S1、S2、S3所述,定义了扩展定时器所需要的数据结构,其包括数据类型为结构的定时信息,数据类型为定时信息的数组,基准时间变量。定时信息数组的组元数量根据整个软件系统同时用到定时器的最大数量确定。
根据步骤S4所述,设置单片机的一个硬件定时器间隔一个周期产生一次中断,一个周期为1毫秒。
根据步骤S5所述,为各任务进程使用定时器设计一个函数,参数包括定时值和消息值。如果参数中的定时值不为零,则表示参数中的定时值时间到时,向消息队列中存入一个参数消息值定义的消息;如果参数中的定时值为零,则表示释放定时信息中消息值为参数指定消息值的定时信息(将定时信息的消息值设为0)。该函数可多次调用来为不同任进程设置一个定时器。
根据步骤S6所述,在硬件定时器产生中断时,硬件自动调用中断服务程序,每次进入中断服务程序时,基准时间变量增量,然后循环比对所有的定时信息,当定时信息的消息值不为0且时间值与基准时间值相等时,则向消息队列中存入定时信息中指定的消息值。
本发明中先分配一个存放定时信息的数组和一个作为基准时间的基准时间变量;再使用一个硬件定时器产生一定周期的中断;最后在中断服务程序中完成定时器的扩展。在每次调用中断服务程序时,基准时间变量加1,然后与各定时值进行比对,如相等,则发送定时信息指定的消息。
Claims (5)
1.一种扩展单片机硬件定时器的方法,其特征在于:它包括以下步骤:
S1:定义定时信息结构类型,定时信息类型为包括时间值变量和消息值变量的结构类型,约定消息值变量为0时,表示定时信息无效;
S2:定义定时信息数组,用于存放定时信息,在初始化定时信息数组时,将每个组元的消息值变量设为0;
S3: 定义基准时间变量,用于在硬件定时器中断服务程序中加1,作为整个定时器扩展的基准时间;
S4:设置硬件定时器的中断周期,使硬件定时器按一定周期调用中断服务程序;
S5:使能定时器的函数,参数包括定时值和消息值,函数程序包括以下子步骤:
S51:查找定时信息数组是否存在参数消息值的定时信息,如果存在则用新的定时信息覆盖原有的定时信息,如果不存在则查找一个消息值为0的定时信息;
S52:判断函数参数的定时值是否为0,如果不为0,则将函数参数的定时值与基准时间变量相加,并将相加的结果存入步骤S51找到的定时信息的时间值变量中,将消息值存入步骤S51找到的定时信息的消息值变量中;如果为0,则将步骤S51找到的定时信息中的消息值清0;
S6:为硬件定时器编写中断服务程序;中断服务程序包括以下子步骤:
S61:基准时间变量加1;
S62:循环比对定时信息数组中消息值不为0的定时信息的时间值,如果时间值和基准时间相等,则发送该定时信息指定的消息,然后设置定时信息消息值为0来释放该定时信息。
2.根据权利要求1所述的一种扩展单片机硬件定时器的方法,其特征在于:所述步骤S1、S2、S3,定义了扩展定时器所需要的数据结构,包括数据类型为结构的定时信息、数据类型为定时信息的数组和基准时间变量,定时信息数组的组元数量根据整个软件系统同时用到定时器的最大数量确定。
3.根据权利要求1所述的一种扩展单片机硬件定时器的方法,其特征在于:所述步骤S4,设置单片机的一个硬件定时器间隔一个周期产生一次中断,所述的一个周期为1毫秒。
4.根据权利要求1所述的一种扩展单片机硬件定时器的方法,其特征在于:所述步骤S5,为各任务进程使用定时器设计一个函数,参数包括定时值和消息值,如果参数中的定时值不为0,则表示参数中的定时值时间到时,向消息队列中存入一个参数消息值定义的消息;如果参数中的定时值为0,则表示释放定时信息中消息值为参数指定消息值的定时信息,并将定时信息的消息值设为0。
5.根据权利要求1所述的一种扩展单片机硬件定时器的方法,其特征在于:所述步骤S6,在硬件定时器产生中断时,硬件自动调用中断服务程序,每次进入中断服务程序时,基准时间变量增量,循环比对所有的定时信息,当定时信息的消息值不为0且时间值与基准时间值相等时,则向消息队列中存入定时信息中指定的消息值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510071478.8A CN104597820B (zh) | 2015-02-11 | 2015-02-11 | 一种扩展单片机硬件定时器的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510071478.8A CN104597820B (zh) | 2015-02-11 | 2015-02-11 | 一种扩展单片机硬件定时器的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104597820A true CN104597820A (zh) | 2015-05-06 |
CN104597820B CN104597820B (zh) | 2017-07-28 |
Family
ID=53123683
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510071478.8A Active CN104597820B (zh) | 2015-02-11 | 2015-02-11 | 一种扩展单片机硬件定时器的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104597820B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866325A (zh) * | 2015-06-20 | 2015-08-26 | 成都彬鸿科技有限公司 | 一种硬件定时器的管理方法 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
CN109032772A (zh) * | 2018-06-19 | 2018-12-18 | 山东省科学院自动化研究所 | 一种嵌入式软件定时器管理方法及系统 |
CN109901879A (zh) * | 2017-12-07 | 2019-06-18 | 普天信息技术有限公司 | 一种循环软件定时器实现方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441570A (zh) * | 2002-02-28 | 2003-09-10 | 深圳市中兴通讯股份有限公司上海第二研究所 | 嵌入式实时操作系统中定时器的计时方法 |
CN1556654A (zh) * | 2003-12-31 | 2004-12-22 | 中兴通讯股份有限公司 | 软件定时器的定时及控制方法 |
CN1755614A (zh) * | 2004-09-29 | 2006-04-05 | 华为技术有限公司 | 定时器的实现方法 |
US20070101316A1 (en) * | 2005-09-12 | 2007-05-03 | Don Berndt | Software Architecture and Program for the Concurrent Execution of Finite State Machine-Encoded Processes, on Single or Multiple-Processor-Based Embedded Systems |
CN1963766A (zh) * | 2006-12-11 | 2007-05-16 | 宁波市科技园区菊风系统软件有限公司 | 一种定时器调度方法 |
CN101272564A (zh) * | 2008-04-17 | 2008-09-24 | 中兴通讯股份有限公司 | 一种软实时定时器调度的方法及软实时定时器模块 |
CN104035786A (zh) * | 2014-07-01 | 2014-09-10 | 上海斐讯数据通信技术有限公司 | 一种软件定时器的优化方法及系统 |
-
2015
- 2015-02-11 CN CN201510071478.8A patent/CN104597820B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441570A (zh) * | 2002-02-28 | 2003-09-10 | 深圳市中兴通讯股份有限公司上海第二研究所 | 嵌入式实时操作系统中定时器的计时方法 |
CN1556654A (zh) * | 2003-12-31 | 2004-12-22 | 中兴通讯股份有限公司 | 软件定时器的定时及控制方法 |
CN1755614A (zh) * | 2004-09-29 | 2006-04-05 | 华为技术有限公司 | 定时器的实现方法 |
US20070101316A1 (en) * | 2005-09-12 | 2007-05-03 | Don Berndt | Software Architecture and Program for the Concurrent Execution of Finite State Machine-Encoded Processes, on Single or Multiple-Processor-Based Embedded Systems |
CN1963766A (zh) * | 2006-12-11 | 2007-05-16 | 宁波市科技园区菊风系统软件有限公司 | 一种定时器调度方法 |
CN101272564A (zh) * | 2008-04-17 | 2008-09-24 | 中兴通讯股份有限公司 | 一种软实时定时器调度的方法及软实时定时器模块 |
CN104035786A (zh) * | 2014-07-01 | 2014-09-10 | 上海斐讯数据通信技术有限公司 | 一种软件定时器的优化方法及系统 |
Non-Patent Citations (2)
Title |
---|
DUOBLESKY: "一个硬件定时器复用多个软件时钟问题", 《百度文库》 * |
文远保,等: "基于μCOS-II的软定时器算法的研究与实现", 《计算机工程与科学》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866325A (zh) * | 2015-06-20 | 2015-08-26 | 成都彬鸿科技有限公司 | 一种硬件定时器的管理方法 |
CN104866325B (zh) * | 2015-06-20 | 2017-12-01 | 成都彬鸿科技有限公司 | 一种硬件定时器的管理方法 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
CN109901879A (zh) * | 2017-12-07 | 2019-06-18 | 普天信息技术有限公司 | 一种循环软件定时器实现方法 |
CN109901879B (zh) * | 2017-12-07 | 2020-10-20 | 普天信息技术有限公司 | 一种循环软件定时器实现方法 |
CN109032772A (zh) * | 2018-06-19 | 2018-12-18 | 山东省科学院自动化研究所 | 一种嵌入式软件定时器管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104597820B (zh) | 2017-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107450972B (zh) | 一种调度方法、装置以及电子设备 | |
US8006247B2 (en) | Multi-tasking real-time operating system for microprocessors with limited memory | |
US20060268967A1 (en) | Supplying instruction to operational stations | |
CN110502340A (zh) | 一种资源动态调整方法、装置、设备及存储介质 | |
CN104536835B (zh) | 一种热备份实时控制系统中自适应任务调度方法 | |
CN104597820A (zh) | 一种扩展单片机硬件定时器的方法 | |
Reusing | Comparison of operating systems tinyos and contiki | |
Davis et al. | How embedded applications using an RTOS can stay within on-chip memory limits | |
CN108196946B (zh) | 一种微内核操作系统的分区多核方法 | |
CN104915256A (zh) | 一种任务的实时调度实现方法及其系统 | |
CN102279766A (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
Low et al. | Survey of languages and runtime libraries for parallel discrete-event simulation | |
CN106802689B (zh) | Windows操作系统环境下可调速高精度定时器的实现方法 | |
CN106874129B (zh) | 一种操作系统进程调度顺序确定方法及控制方法 | |
CN103458045A (zh) | 分布式集群的动态部署方法和系统 | |
CN116107728B (zh) | 一种任务执行方法、装置、存储介质及电子设备 | |
CN109426556B (zh) | 一种进程调度方法和装置 | |
CN106933535B (zh) | 一种在单片机系统中实现高精度延时的方法 | |
CN103257864A (zh) | 嵌入式软件任务调度方法 | |
CN111274667A (zh) | 一种跨尺度材料计算软件集成计算系统及方法 | |
CN108920198B (zh) | 一种bios中更改系统能效模式的方法、系统及服务器 | |
De Munck et al. | Design and performance evaluation of a conservative parallel discrete event core for GES | |
CN109032772A (zh) | 一种嵌入式软件定时器管理方法及系统 | |
De Sensi et al. | State-aware concurrency throttling | |
Rao et al. | Comparison of process scheduling methodologies for embedded systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |