CN109947468B - 一种实现无阻塞无任务切换的事件延时方法 - Google Patents
一种实现无阻塞无任务切换的事件延时方法 Download PDFInfo
- Publication number
- CN109947468B CN109947468B CN201711385884.7A CN201711385884A CN109947468B CN 109947468 B CN109947468 B CN 109947468B CN 201711385884 A CN201711385884 A CN 201711385884A CN 109947468 B CN109947468 B CN 109947468B
- Authority
- CN
- China
- Prior art keywords
- delay
- event
- task
- turning
- blocking
- 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.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种实现无阻塞无任务切换的事件延时方法,该方法应用在嵌入式操作系统中,所述方法包括:步骤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。
Description
技术领域
本发明涉及计算机领域,具体涉及一种实现无阻塞无任务切换的事件延时方法。
背景技术
在单片机的微处理器编程中,除了可编程逻辑器件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为本发明的实现无阻塞无任务切换的函数执行流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的说明。
本发明的技术方案具体为:
设计实现无阻塞无任务切换的函数NT8U NoBlockTimerHMSM;
函数INT8U NoBlockTimerHMSM(INT8U ID,INT8U hours,INT8U minutes,INT8Useconds,INT16U milli),有五个输入参数,分别是ID号,小时,分钟,秒,毫秒。最多可以实现TIMER_MAX个无阻塞延时,TIMER_MAX可以随意设置,只要满足开发需求即可,最大设置为256。函数值返回0表示时间未到,返回1表示时间到。
对函数NT8U NoBlockTimerHMSM输入不同的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:本发明的INT8U NoBlockTimerHMSM(INT8U ID,INT8U hours,INT8U minutes。INT8U seconds,INT16U milli)函数,即实现了无阻塞的准确延时,又实现了无任务切换。
下面以三段代码为例,来分析这三种延时用法的差别,在呼吸机中当出现报警时,喇叭会发出报警音,有时为了免打扰,会按下静音键,让机器静音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毫秒的任务了,按键自然无法查询,即使按下按键,也等不到任何键值。
通过上述分析,可以基本知道各种延时函数的应用,因此,在类似上述这种等待时间和那种需要判断持续按下某按键几秒的情况下,特别适合使用本发明的方法设计的无阻塞无延时的函数。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (2)
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。
2.根据权利要求1所述的实现无阻塞无任务切换的事件延时方法,其特征在于,所述方法在步骤1)之前还包括:为所有被触发的延时事件建立统一的ID号,从而支持多个延时事件,实现系统所需的多个无阻塞无任务切换的功能需求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711385884.7A CN109947468B (zh) | 2017-12-20 | 2017-12-20 | 一种实现无阻塞无任务切换的事件延时方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711385884.7A CN109947468B (zh) | 2017-12-20 | 2017-12-20 | 一种实现无阻塞无任务切换的事件延时方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947468A CN109947468A (zh) | 2019-06-28 |
CN109947468B true CN109947468B (zh) | 2021-07-02 |
Family
ID=67005309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711385884.7A Active CN109947468B (zh) | 2017-12-20 | 2017-12-20 | 一种实现无阻塞无任务切换的事件延时方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947468B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706739A (zh) * | 2009-12-03 | 2010-05-12 | 山东科技大学 | 一种实时操作系统uCOS-Ⅱ的任务调度算法的硬件实现方法 |
CN102591703A (zh) * | 2011-01-10 | 2012-07-18 | 中兴通讯股份有限公司 | 操作系统的任务调度方法、装置及计算机 |
CN103412755A (zh) * | 2013-08-16 | 2013-11-27 | 深圳东原电子有限公司 | 一种硬件实时操作系统 |
CN103473031A (zh) * | 2013-01-18 | 2013-12-25 | 龙建 | 协同并发式消息总线、主动构件组装模型及构件拆分方法 |
CN107360102A (zh) * | 2017-07-17 | 2017-11-17 | 迈普通信技术股份有限公司 | 以太报文接收方法及数据通信设备 |
CN107391271A (zh) * | 2017-05-17 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种基于消息队列系统的延时任务触发方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7043708B2 (en) * | 2003-06-09 | 2006-05-09 | Lsi Logic Corporation | Intelligent crosstalk delay estimator for integrated circuit design flow |
-
2017
- 2017-12-20 CN CN201711385884.7A patent/CN109947468B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706739A (zh) * | 2009-12-03 | 2010-05-12 | 山东科技大学 | 一种实时操作系统uCOS-Ⅱ的任务调度算法的硬件实现方法 |
CN102591703A (zh) * | 2011-01-10 | 2012-07-18 | 中兴通讯股份有限公司 | 操作系统的任务调度方法、装置及计算机 |
CN103473031A (zh) * | 2013-01-18 | 2013-12-25 | 龙建 | 协同并发式消息总线、主动构件组装模型及构件拆分方法 |
CN103412755A (zh) * | 2013-08-16 | 2013-11-27 | 深圳东原电子有限公司 | 一种硬件实时操作系统 |
CN107391271A (zh) * | 2017-05-17 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种基于消息队列系统的延时任务触发方法和装置 |
CN107360102A (zh) * | 2017-07-17 | 2017-11-17 | 迈普通信技术股份有限公司 | 以太报文接收方法及数据通信设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109947468A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100535879C (zh) | 一种嵌入式实时系统中断处理装置及方法 | |
ATE487180T1 (de) | Vorrichtung und verfahren zur umschaltung zwischen prozessen | |
ATE409904T1 (de) | Betriebssysteme | |
WO2001057658A3 (en) | A system and method for altering an operating system start-up sequence prior to operating system loading | |
WO2004114128A3 (en) | Instruction controlled data processing device | |
WO2004029800A3 (en) | Verifiable processes in a heterogeneous distributed computing environment | |
WO2006116046A3 (en) | Asynchronous processor | |
CN104536835A (zh) | 一种热备份实时控制系统中自适应任务调度方法 | |
WO2004079513A3 (en) | System and method for determining when an ejb compiler needs to be executed | |
CN104391754A (zh) | 一种任务异常的处理方法及装置 | |
CN109947468B (zh) | 一种实现无阻塞无任务切换的事件延时方法 | |
TW200636569A (en) | Method for providing an auxiliary bios code utilizing time expiry control, and related device | |
WO2007047784A3 (en) | Shared interrupt control method and system for a digital signal processor | |
WO2019064348A1 (ja) | コントローラ | |
US8245075B2 (en) | Overclocking CPU with stepwise increase in frequency by BIOS gaining control upon interrupt generated at predetermined intervals | |
WO2003069424A3 (de) | Reaktionszeit-beschränkung eines software-prozesses | |
JP2008225807A (ja) | 制御装置およびそのプログラム暴走監視方法 | |
CN106933535B (zh) | 一种在单片机系统中实现高精度延时的方法 | |
WO2014175914A1 (en) | Software debouncing and noise filtering modules for interrupts | |
US20100180279A1 (en) | Field control device and field control method | |
WO2004090719A3 (en) | Operating systems | |
CN103197959B (zh) | 一种多核cpu的切换方法 | |
CN101944056A (zh) | 一种多任务系统监控方法及装置 | |
Lakhani et al. | Applying design patterns to improve the reliability of embedded systems through a process of architecture migration | |
CN110986929A (zh) | 导航与控制周期不同步的飞行控制方案的软件实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |