一种实现无阻塞无任务切换的事件延时方法技术

技术编号:21476845 阅读:88 留言:0更新日期:2019-06-29 04:37
本发明专利技术公开了一种实现无阻塞无任务切换的事件延时方法,该方法应用在嵌入式操作系统中,所述方法包括:步骤1)设置所有被触发的延时事件B的触发标志;步骤2)执行周期为T1的主任务A,当周期为T2的延时事件B被触发后,改变延时事件B的触发标志;步骤3)在主任务A中,判断延时事件B的触发标志改变,如果是,转入步骤4),否则,转入步骤7);步骤4)判断延时事件B的延时是否达到,如果是,转入步骤5),否则,转入步骤6);步骤5)恢复延时事件B的触发标志,执行延时事件B满足后的处理,转入步骤7);步骤6)执行延时事件B持续过程中的处理;步骤7)执行主任务A的其它处理,然后转入步骤2),重复周期T1的主任务A。

【技术实现步骤摘要】
一种实现无阻塞无任务切换的事件延时方法
本专利技术涉及计算机领域,具体涉及一种实现无阻塞无任务切换的事件延时方法。
技术介绍
在单片机的微处理器编程中,除了可编程逻辑器件FPGA外,其它各种单片机的微处理器等都是按着机器指令顺序执行的。因此若使用普通的事件延时方法,即大多数编程语言使用的循环语句,能够达到延时时间的目的,但这时除了中断可以执行外,其他程序都在等待,不能工作。若使用UCOSII操作系统自带的延时库函数OSTimeDly(),可以实现无阻塞延时,也不影响其它程序的运行,但却发生了任务切换。因此,上述两种方法都无法满足无阻塞无任务切换的需求。
技术实现思路
本专利技术的目的在于,克服现有的技术无法满足单片机无阻塞无任务切换的需求,提出了一种实现无阻塞无任务切换的事件延时方法。为了实现上述目的,本专利技术提出了一种实现无阻塞无任务切换的事件延时方法,该方法应用在嵌入式操作系统中,所述方法包括:步骤1)设置所有被触发的延时事件B的触发标志;步骤2)嵌入式操作系统执行周期为T1的主任务A,当周期为T2的延时事件B被触发后,改变延时事件B的触发标志;步骤3)在主任务A中,判断延时事件B的触发标志改变,如果是,转入步骤4),否则,转入步骤7);步骤4)判断延时事件B的延时是否达到,如果是,转入步骤5),否则,转入步骤6);步骤5)恢复延时事件B的触发标志,执行延时事件B满足后的处理,转入步骤7);步骤6)执行延时事件B持续过程中的处理;步骤7)执行主任务A的其它处理,然后转入步骤2),重复嵌入式系统的周期T1的主任务A。作为上述方法的一种改进,所述方法在步骤1)之前还包括:为所有被触发的延时事件建立统一的ID号,从而支持多个延时事件,实现系统所需的多个无阻塞无任务切换的功能需求。本专利技术的优势在于:本专利技术的方法能够使单片机微处理器在实现延时时,满足无阻塞和无任务切换的需求,特别适用于一些既需要延时又不想阻塞其它函数或语句执行的场合。附图说明图1为本专利技术的实现无阻塞无任务切换的函数执行流程图。具体实施方式下面结合附图和具体实施例对本专利技术进行详细的说明。本专利技术的技术方案具体为:设计实现无阻塞无任务切换的函数NT8UNoBlockTimerHMSM;函数INT8UNoBlockTimerHMSM(INT8UID,INT8Uhours,INT8Uminutes,INT8Useconds,INT16Umilli),有五个输入参数,分别是ID号,小时,分钟,秒,毫秒。最多可以实现TIMER_MAX个无阻塞延时,TIMER_MAX可以随意设置,只要满足开发需求即可,最大设置为256。函数值返回0表示时间未到,返回1表示时间到。对函数NT8UNoBlockTimerHMSM输入不同的ID号,给每个ID输入想要的延时时间,即可实现每个ID的无阻塞无任务切换的延时,最大延时时间是232小时59分59秒999毫秒,满足延时需求;首先调用NoBlockTimerHMSM(ID,0,0,0,0)对此ID延时进行初始化,将首次运行的此ID的标志first_run[ID]=1,然后程序返回,等待以后的延时调用。在调用NoBlockTimerHMSM(5,0,0,10,0)时,即第五个ID延时10秒,先检查判断输入参数是否合法,如分钟不能超过59分钟,秒不能超过59秒,毫秒不能超过999毫秒,如输错,函数不能延时,直接返回。参数输入合法后,获取到当前时间值作为开始计时的起点值,这个值在无操作系统的代码中,利用定时器计时得到,若使用ucosii操作系统就比较简单了,直接调用此操作系统提供的库函数OSTimeGet()来获取当前时间。延时时间等于hours*3600L+minutes*60L+seconds+(milli/1000),并将标志first_run[ID]=0。本函数每隔一定时间运行一次,每次进来,都获取当前时间并减去开始起点时间,若相减后的值小于延时时间,则函数返回0,当相减后的值大于延时时间,则返回1,说明延时时间到了,将标志first_run[ID]=1,为下次重新赋值运行延时做准备。下面对三种无阻塞无任务切换函数的比较如下:a:普通delay函数,一是延时时间不准确,二是阻塞其它程序运行;b:UCOSII自带OSTimeDly函数能实现准确延时,但延时时会发生任务切换;c:本专利技术的INT8UNoBlockTimerHMSM(INT8UID,INT8Uhours,INT8Uminutes。INT8Useconds,INT16Umilli)函数,即实现了无阻塞的准确延时,又实现了无任务切换。下面以三段代码为例,来分析这三种延时用法的差别,在呼吸机中当出现报警时,喇叭会发出报警音,有时为了免打扰,会按下静音键,让机器静音2分钟。这个功能实现是在某一个50毫秒任务中执行的,这个任务中还有按键查询等其它功能。如图1所示,本专利技术的方法:在机器上电时程序将静态变量timer_silence_ok初始化为0,当按下静音键,静音标志silence_flag为1,程序第5,6行将ID号为1的延时函数初始化复位,从零开始准备计时,第8行是用于判断延时时间是否来到,当延时时间没到,则执行第13行直接跳出函数,继续执行其他需要的语句,如按键查询;当延时2分钟时间到,则执行第10行,将静音标志置0,即取消静音,恢复报警音。然后也是跳出此函数,执行其他需要的语句,如按键查询。若不采用这种无阻塞无延时的函数,则很难实现这种功能。采用a方法:可想而知,此时函数执行2分钟延时,除了中断中代码可以执行外,其它函数和任务都在等待中,不能进行工作。若换成方法b:操作系统自身延时,一样不能满足的需求。如果使用这种方法延时,对静音延时2分钟,没有影响,但却影响了其他语句运行,对于原本50毫秒的任务,除了要处理静音外,还要时刻监测是否有按键按下,当在静音处理中加入了120秒切换延时,则这个任务就变成了120秒加50毫秒的任务了,按键自然无法查询,即使按下按键,也等不到任何键值。通过上述分析,可以基本知道各种延时函数的应用,因此,在类似上述这种等待时间和那种需要判断持续按下某按键几秒的情况下,特别适合使用本专利技术的方法设计的无阻塞无延时的函数。最后所应说明的是,以上实施例仅用以说明本专利技术的技术方案而非限制。尽管参照实施例对本专利技术进行了详细说明,本领域的普通技术人员应当理解,对本专利技术的技术方案进行修改或者等同替换,都不脱离本专利技术技术方案的精神和范围,其均应涵盖在本专利技术的权利要求范围当中。本文档来自技高网...

【技术保护点】
1.一种实现无阻塞无任务切换的事件延时方法,该方法应用在嵌入式操作系统中,所述方法包括:步骤1)设置所有被触发的延时事件B的触发标志;步骤2)嵌入式操作系统执行周期为T1的主任务A,当周期为T2的延时事件B被触发后,改变延时事件B的触发标志;步骤3)在主任务A中,判断延时事件B的触发标志改变,如果是,转入步骤4),否则,转入步骤7);步骤4)判断延时事件B的延时是否达到,如果是,转入步骤5),否则,转入步骤6);步骤5)恢复延时事件B的触发标志,执行延时事件B满足后的处理,转入步骤7);步骤6)执行延时事件B持续过程中的处理;步骤7)执行主任务A的其它处理,然后转入步骤2),重复嵌入式系统的周期T1的主任务A。

【技术特征摘要】
1.一种实现无阻塞无任务切换的事件延时方法,该方法应用在嵌入式操作系统中,所述方法包括:步骤1)设置所有被触发的延时事件B的触发标志;步骤2)嵌入式操作系统执行周期为T1的主任务A,当周期为T2的延时事件B被触发后,改变延时事件B的触发标志;步骤3)在主任务A中,判断延时事件B的触发标志改变,如果是,转入步骤4),否则,转入步骤7);步骤4)判断延时事件B的延时是否达到,如果是,转入步骤5),否则,转入步骤6)...

【专利技术属性】
技术研发人员:幸坤涛
申请(专利权)人:北京谊安医疗系统股份有限公司
类型:发明
国别省市:北京,11

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

1