一种基于C语言的异步延时执行方法及执行模块技术

技术编号:16365323 阅读:46 留言:0更新日期:2017-10-10 21:18
本发明专利技术公开一种基于C语言的异步延时执行模块,其包括结构体定义模块、计数驱动模块和异步延时(重)调用模块;异步延时(重)调用模块设有计数值模块、注入事件模块和事件标签模块,结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时(重)调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。本发明专利技术采用异步延时调用,不阻塞主线程,且对CPU资源的消耗比实时操作系统小。

Asynchronous delay execution method and execution module based on C language

The invention discloses an asynchronous delay execution module based on C language, which includes the structure definition module, driver module and asynchronous delay count (RE) call module; asynchronous delay (RE) call module is provided with a counting module, event injection module and event tag module, structure definition module for the definition of event structure and to the event count; drive module is used for using the time unit to count into the event call module, and the counting process, the trigger event queue clearance, count to accumulate did not trigger the event; asynchronous delay (RE) call module is used for the specified events, events happen asynchronously the delay count and event pointer access to the specified storage location, and the label of the same event on behalf of the event count re injection. The invention adopts asynchronous delay call, does not block the main thread, and consumes less CPU resources than the real-time operating system.

【技术实现步骤摘要】
一种基于C语言的异步延时执行方法及执行模块
本专利技术涉及一种延时执行方法,尤其涉及一种基于C语言的异步延时执行方法及执行模块。
技术介绍
异步延时执行,是一种对期望事件发生时间的延时和对期望事件延时发生不阻塞主线程的处理方法。在面向对象的语言(例如C++、C#、Java等)中,可以采用多线程或异步函数实现;现有技术中,在C语言中采用实时操作系统(RealTimeOS)或采用多线程使用,但对小容量RAM和主频较低的MCU来说,存在较大的堆栈消耗,且多线程间维护成本高,反而得不偿失。综上,有必要设计一种基于C语言的异步延时执行方法及执行模块来弥补上述缺陷。
技术实现思路
本专利技术提出一种基于C语言的异步延时执行方法及执行模块,其解决了现有技术中在C语言中采用实时操作系统使用多线程导致堆栈消耗大和多线程间维护成本高的缺陷。本专利技术采用异步延时调用,不阻塞主线程,且对CPU资源的消耗比实时操作系统小。本专利技术的技术方案是这样实现的:本专利技术公开一种基于C语言的异步延时执行模块,其包括结构体定义模块、计数驱动模块和调用模块;调用模块设有计数值模块、注入事件模块和事件标签模块,且调用模块包括异步延时调用模块和异步延时重调用模块;结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置;异步延时重调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。其中,事件结构体包括事件启动标志、事件启动计数值、事件计数值和事件指针。其中,事件启动标志用于标记该事件是否在启动延时异步调用中。其中,事件启动计数值用于记录事件注入时设置的延时值。其中,事件计数值用于在计数驱动模块在每次计数时,采用自减方式进行事件异步延时触发的倒数值。其中,事件指针用于存储异步延时触发发生的事件的方法指针。其中,在调用一次保证执行的情况下,采用异步延时调用模块;其中异步延时调用模块的工作流程为:在对指定事件调用后,该事件开始计数,中间重复调用同事件的异步延时调用模块,该事件并不会重新计数,直到该事件达到指定计数值、触发事件发生后,才可以调用异步延时调用模块再次对事件进行调用。其中,在调用完毕后,需根据实际情况,对将要发生的事件的执行时间进行随时修改的情况下,采用异步延时重调用模块;其中异步延时重调用模块的工作流程为:在对指定事件调用后,该事件开始计数,中间重复调用同事件的异步延时重调用模块,该事件重新计数;如果一直在该事件计数未到达前重复调用异步延时重调用模块,则该事件会一直重置计数,事件将永远不会发生。本专利技术还公开一种基于C语言的异步延时执行模块的执行方法,其包括如下步骤:(S01)通过结构体定义模块定义多组需要发生的事件;(S02)异步延时调用模块、异步延时重调用模块分别针对步骤(S01)中定义的事件进行编号,且设定每组事件异步发生的延时计数值和事件指针指向,并获取指定存储位置;(S03)计数驱动模块每一间隔周期执行一次,每次执行均遍历步骤(S01)中定义的多个事件,如果事件启动标志为启动状态,则计数驱动模块将自减该事件的计数值,当该事件的计数值自减为0时,表示该事件已达到步骤(S02)中延时计数值的设定值,计数驱动模块通过该事件的事件指针,触发执行该事件;如果事件启动标志为未启动状态,则计数驱动模块将跳过此事件的驱动,执行步骤(S04);(S04)异步延时重调用模块对同一事件标签代表的事件重新计数注入。与现有技术相比,本专利技术具有如下优点:本专利技术采用C语言实现,作为最通用的编程语言,可以跨平台实现,避免了移植不同平台所耗费的开发成本,提高了兼容性,同时可便利地嵌入到各种对RAM和主频使用要求苛刻的嵌入式MCU中;本专利技术只需少量存储空间,在嵌入式MCU上实现具有对系统资源要求低,代码量小等优点。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术基于C语言的异步延时执行模块的结构框图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为了有助于和澄清随后的实施例的描述,在对本专利技术的具体实施方式进行详细说明之前,对部分术语进行解释,下列的解释应用于本说明书以及权利要求书。本专利技术中出现的RAM是RandomAccessMemory的缩写,其中文意思为随机存取存储器,称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存,其可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。本专利技术中出现的MCU是MicrocontrollerUnit的缩写,其中文意思为微控制单元,其本质为一单片机,指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成的芯片级的计算机。本专利技术中出现的其它英文词语均为代码,不代表其它任何意义。参照图1,作为优选的实施方式,本专利技术公开一种基于C语言的异步延时执行模块,其包括结构体定义模块、计数驱动模块和调用模块;调用模块设有计数值模块、注入事件模块和事件标签模块,且调用模块包括异步延时调用模块和异步延时重调用模块;结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置;异步延时重调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。本专利技术事件结构体包括事件启动标志、事件启动计数值、事件计数值和事件指针;事件启动标志用于标记该事件是否在启动延时异步调用中;事件启动计数值用于记录事件注入时设置的延时值;事件计数值用于在计数驱动模块在每次计数时,采用自减方式进行事件异步延时触发的倒数值;事件指针用于存储异步延时触发发生的事件的方法指针。本专利技术在调用一次保证执行的情况下,采用异步延时调用模块;而在在调用完毕后,需根据实际情况,对将要发生的事件的执行时间进行随时修改的情况下,采用异步延时重调用模块。其中异步延时调用模块的工作流程为:在对指定事件调用后,该事件开始计数,中间重复调用同事件的异步延时调用模块,该事件并不会重新计数,直到该事件达到指定计数值、触发事件发生后,才可以调用异步延时调用模块再次对事件进行调用。异步延时重调用模块的工作流程为:在对指定事本文档来自技高网...
一种基于C语言的异步延时执行方法及执行模块

【技术保护点】
一种基于C语言的异步延时执行模块,其特征在于,其包括结构体定义模块、计数驱动模块和调用模块;调用模块设有计数值模块、注入事件模块和事件标签模块,且调用模块包括异步延时调用模块和异步延时重调用模块;结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置;异步延时重调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。

【技术特征摘要】
1.一种基于C语言的异步延时执行模块,其特征在于,其包括结构体定义模块、计数驱动模块和调用模块;调用模块设有计数值模块、注入事件模块和事件标签模块,且调用模块包括异步延时调用模块和异步延时重调用模块;结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置;异步延时重调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。2.如权利要求1所述的基于C语言的异步延时执行模块,其特征在于,事件结构体包括事件启动标志、事件启动计数值、事件计数值和事件指针。3.如权利要求2所述的基于C语言的异步延时执行模块,其特征在于,事件启动标志用于标记该事件是否在启动延时异步调用中。4.如权利要求3所述的基于C语言的异步延时执行模块,其特征在于,事件启动计数值用于记录事件注入时设置的延时值。5.如权利要求4所述的基于C语言的异步延时执行模块,其特征在于,事件计数值用于在计数驱动模块在每次计数时,采用自减方式进行事件异步延时触发的倒数值。6.如权利要求5所述的基于C语言的异步延时执行模块,其特征在于,事件指针用于存储异步延时触发发生的事件的方法指针。7.如权利要求1-6中任一项所述的基于C语言的异步延时执行模块,其特征在于,在调用一次保证执行的情况下,采用异步延时调用模块;其中异步延时调用模块的工作流程为:在对指定事件调用后,该...

【专利技术属性】
技术研发人员:崔顺升段俊彪陈景超陈钦宇黄福荣
申请(专利权)人:广州安圣信息科技有限公司
类型:发明
国别省市:广东,44

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

1