CN104102491A - 单片机实时任务与耗时任务并行执行的实现方法和系统 - Google Patents
单片机实时任务与耗时任务并行执行的实现方法和系统 Download PDFInfo
- Publication number
- CN104102491A CN104102491A CN201410362872.2A CN201410362872A CN104102491A CN 104102491 A CN104102491 A CN 104102491A CN 201410362872 A CN201410362872 A CN 201410362872A CN 104102491 A CN104102491 A CN 104102491A
- Authority
- CN
- China
- Prior art keywords
- time
- task
- real
- consuming
- call function
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种单片机实时任务与耗时任务并行执行的实现方法和系统,包括步骤:将所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现里把所有实时任务依次调用一次;将耗时任务划分为若干个执行步骤,对应于每个执行步骤至少植入一次该实时任务调用函数的调用。本发明具有以下技术效果:既不影响程序流程的可读性,又方便地实现了在单线程模式下实现并行运算的技巧,且完整地保留了调用栈,适合调试时定位故障源。
Description
技术领域
本发明涉及单片机的程序运行管理,特别是与单片机的实时任务与耗时任务的协调有关。
背景技术
实时任务是指不可阻塞、不可拖延和响应及时的任务,通常包括通信协议报文处理、定时任务及喂狗等,这类任务处理函数非常快速,运行时间短。耗时任务是指有内在处理逻辑、有特定执行顺序、且需要耗费较长时间才能执行完成的任务,这类任务属于应用层次,不要求实时性,但必须保证执行的顺序。
现有单片机环境中通常使用两种方式实现实时任务和耗时任务的并行执行。一种使用RTOS(实时操作系统),由实时操作系统提供中断级别的分时多任务,程序中只需调用RT库提供的API创建新任务,即可实现实时任务和耗时任务的并行运行。另一种不使用RTOS,参见图2,其是把耗时任务原始执行逻辑分解成若干个耗时较小的执行步骤1、2…N;参见图1,其在入口main()函数中使用无限循环,实时任务的处理大致包括定时任务、发送报文、接收并解释报文和喂狗等;参见图3,每次循环只调用耗时任务的一个步骤,下次循环调用下一个步骤,以此在不影响系统实时响应的基础上模拟出耗时任务也在并行运行的效果。
在有条件的单片机上,例如有足够大的RAM(随机存取存储器)和存储空间的情况下,第一选择都是使用RTOS,毕竟由库提供的多任务环境极大地减少了编写多任务程序的难度和复杂度,尤其是调试代码时指令执行逻辑清晰,调用栈跟踪方便,很容易根据调用上下文查错和纠错,但由于涉及到任务调度、TCB(任务控制块)数据分配及数据同步处理等因素,需要占用额外的内存和处理器资源,也相应增加了同步处理的复杂性。
而且由于成本的因素,存在大量如下的单片机类型:一种是存储空间非常有限,比如:只有几K字节甚至几百字节的RAM,无法满足RTOS所需要的基本存储需求;另一种是单片机厂商未提供对应的RTOS。对于这样的单片机类型,只能选择任务分解方式提供模拟多任务效果,这种方式必须打乱程序逻辑结构,且需要增加额外的变量空间来记住任务的当前执行步骤,在下一个循环周期能从记忆的执行步骤中恢复状态以便继续执行剩余的步骤;此方式会明显增加程序逻辑的复杂度,状态转换极易出错,且由于完全丢失了调用上下文关系,导致出错时难以确定故障来源,增加了纠错和维护的成本。
发明内容
本发明要解决的技术问题在于避免现有技术中无法使用RTOS的单片机软件的情况下,而所存在的实时和耗时任务执行需要占用额外的内存和处理器资源、同步处理复杂,或者程序逻辑复杂、状态转换容易出错、纠错和维护成本高等不足之处,而提出一种单片机实时任务与耗时任务并行执行的实现方法。
针对上述要解决的技术问题,本发明的技术方案如下:
一种单片机实时任务与耗时任务并行执行的实现方法,包括以下步骤:将所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现里把所有实时任务依次调用一次;将耗时任务划分为若干个执行步骤,对应于每个执行步骤至少植入一次该实时任务调用函数的调用。
进一步地,计算所述耗时任务中各执行步骤所需要的时间,并根据各执行步骤所需要的时间长短而决定将实时任务调用函数植入所述耗时任务的具体执行步骤中。
进一步地,所述耗时任务中各执行步骤所需要时间的计算通过时间统计代码实现。
进一步地,所述耗时任务按照函数流程编写功能代码。
进一步地,植入所述实时任务调用函数时,保证相邻两次实时任务调用函数的调用之间所耗费的时间足够短,以便保证实时任务的实时性。
进一步地,在耗时任务需要等待实时任务的执行结果时,反复调用所述实时任务调用函数,以至所期待结果出现或者超时才继续执行后续流程。
进一步地,所述实时任务调用函数包括执行一下步骤:执行定时任务、执行发送报文、执行接收并解析报文以及执行喂狗。
进一步地,所述单片机不支持实时操作系统。
一种单片机实时任务与耗时任务并行执行的实现系统,包括耗时任务模块、实时任务模块和中断任务模块,所述耗时任务模块位于系统最上层,所述实时任务模块位于系统中间层,中断任务位于系统最底层;所述实时任务模块的所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现中把所有实时任务依次调用一次;所述耗时任务模块将耗时任务划分为若干个执行步骤,对应于耗时任务执行步骤至少植入一次该实时任务调用函数的调用。
进一步地,所述实时任务模块包括依次连接的用于更新定时任务计数器的定时任务子模块、用于发送报文的发送报文子模块、用于接收并解析报文的接收并解析报文子模块和用于喂狗的喂狗子模块。
本发明的单片机实时任务与耗时任务并行执行的实现方法,与现有技术相比,具有以下技术效果:
通过植入式调用实时任务调用函数AsyncWork(),既不影响程序流程的可读性,又方便地实现了在单线程模式下实现并行运算的技巧,且完整地保留了调用栈,适合调试时定位故障源。任务执行逻辑清晰,避免了分解式执行导致的调用上下文丢失,无法从调用栈获取错误来源的问题。
植入式调用方案使得软件开发过程更清晰,即开发初期无需考虑任务是否耗时,只需按照正常流程完成任务功能代码。仅需在后期测试期间收集任务执行时间,并在合适的地方加入AsyncWork()调用来保证实时任务的实时性即可。采用本技术方案设计,可以使单片机软件开发人员从耗时任务拆分的繁琐劳动中解脱出来,专注于任务的逻辑流程设计,而不需要花费很大精力处理各个步骤的协调和状态记忆。
不需要RTOS的任务调度和数据同步控制,不占用额外内存空间,没有任务调度导致的性能损失,完全可以运行在RAM很小的设备上。
附图说明
图1是现有的任务分解式的main()函数流程图。
图2是现有的耗时任务原始流程图。
图3是现有的耗时任务分解流程图。
图4是本发明实施例的单片机实时任务与耗时任务并行执行的实现系统方框示意图。
图5是本发明实施例的实时任务调用函数AsyncWork()函数所封装的实时任务流程图。
图6是本发明实施例的耗时任务植入式调用流程图。
图7是本发明实施例的简单耗时任务流程图。
具体实施方式
下面结合各附图对实施例作进一步详述:
参见图4,一种单片机实时任务与耗时任务并行执行的实现系统,包括耗时任务模块、实时任务模块和中断任务模块,所述耗时任务模块位于系统最上层,所述实时任务模块位于系统中间层,中断任务模块位于系统最底层。这样通过把任务层次进行明确划分,能保证实时任务和耗时任务在单线程模式下同时并行执行,且能避免拆分耗时任务后跟实时任务混合调度的混乱局面。
具体地,所述实时任务模块包括依次连接的用于更新定时任务计数器的定时任务子模块、用于发送报文的发送报文子模块、用于接收并解析报文的接收并解析报文子模块和用于喂狗的喂狗子模块。所述中断任务模块的中断任务作为硬件级的实时服务,包括定时器中断、通信中断以及其它中断,本身已经具备并行执行的基础,属于现有技术,此处不再赘述。
一种单片机实时任务与耗时任务并行执行的实现方法,基于单片机不支持实时操作系统,包括以下步骤:将所有实时任务打包成一个实时任务调用函数AsyncWork(),在该实时任务调用函数的实现里把所有实时任务依次调用一次,例如:从发送缓冲区提取并发送报文;从接收缓冲区提取并解析报文;调用定时任务以及喂狗。将耗时任务划分为若干个执行步骤,对应于每个执行步骤至少植入一次该实时任务调用函数的调用。在耗时任务内部随时调用此实时任务调用函数AsyncWork()来处理实时任务,这也是本发明方法实现的基础。如图6所示,把整个耗时任务划分为若干个执行步骤1、2…N,对应于每个执行步骤1、2…N相应地至少植入一次实时任务调用函数AsyncWork()的调用。上述实现方法当然也可以适用于单片机支持实时操作系统的情形。
一些实施例中,耗时任务按照普通的函数流程编写代码,而不需要编写任务拆分代码。在全部功能代码完成后,可通过经验或额外的时间统计代码等方式计算所述耗时任务中各执行步骤所需要的时间,并根据各执行步骤所需要的时间长短而决定将实时任务调用函数植入所述耗时任务的具体执行步骤中,即根据各执行步骤所需要的时间长短确定在耗时任务的哪些具体执行步骤中加入实时任务调用函数AsyncWork()的调用。本发明的植入式调用在运行效果上与现有技术中的分解式调用相同,但它保留了耗时任务的程序控制逻辑,对于软件开发者来说,植入式调用更符合思维习惯。
一些实施例中,植入所述实时任务调用函数时,考虑以下两个条件:一是保证相邻两次实时任务调用函数的调用之间所耗费的时间足够短,以便保证实时任务的实时性。例如:必须在指定的时间内喂狗以避免看门狗复位单片机。二是在耗时任务的等待期间,有时耗时任务需要等待实时任务的执行结果,例如耗时任务发送一个报文后必须等待实时任务一个响应报文时,可以反复调用所述实时任务调用函数,以至所期待结果出现或者超时才继续执行后续流程。
一些实施例中,参见图5,本发明的实时任务调用函数AsyncWork()包括执行以下步骤:
S101、执行定时任务;
S102、执行发送报文;
S103、执行接收并解析报文;
S104、执行喂狗。
图7是本发明一实施例的简单耗时任务流程图。这里假设一种简单耗时任务的场景:在设备中向外部设备发送一个查询指令并等待外部设备返回结果,如果外部设备就绪,则再发送一个控制指令并等待结果;如果外部设备未就绪或者任何一个指令的响应超时,则任务直接结束。使用本发明方法执行此任务的基本流程如下:
S301、构造查询指令报文并放入发送队列;
S302、构造定时任务计数器以计算超时;
S303、调用实时任务调用函数AsyncWork();完成发送报文、检测接收报文、超时计数器更新等,这个过程具体包括:如果发送队列存在报文则取出报文并发送给外部设备;判断接收缓冲区是否存在完整报文,如果存在,则解析报文后放入接收队列;以及更新定时任务计数器;
S304、检测接收队列是否存在响应报文,如果存在,则执行步骤S305,否则执行步骤S314;
S305、停止定时任务计数器计数;
S306、根据报文内容,判断外部设备是否就绪,如果未就绪,则结束任务,如果就绪,则执行步骤S306;
S307、构造控制指令报文并放入发送队列;
S308、构造定时任务计数器以计算超时
S309、调用实时任务调用函数AsyncWork();完成发送报文、检测接收报文、超时计数器更新等,这个过程具体包括:如果发送队列存在报文则取出报文并发送给外部设备;判断接收缓冲区是否存在完整报文,如果存在,则解析报文后放入接收队列;以及更新定时任务计数器;
S310、检测接收队列是否存在响应报文,如果存在,则执行步骤S311,如果不存在,则执行步骤S313;
S311、停止定时任务计数器计数;
S312、根据报文内容,检测控制指令的执行结果,结束任务。
S313、获取计数器判断是否超时,如果超时,则结束任务;未超时则重复执行步骤S309;
S314、获取计数器判断是否超时,如果超时,则结束任务;未超时则重复执行步骤S303。
可以看出,本发明方法的开发过程非常符合程序员的思维。通过一种“随时随地植入”的机制,在不依赖RTOS的基础上实现实时任务和耗时任务的并行执行,解决了RTOS方式需要占用额外内存空间、需要任务切换时间、数据同步控制的问题,也解决了非RTOS的任务分解方式需要拆分耗时任务、丢失调用上下文、需要额外的全局或静态状态变量、不利于调试查错的问题,最终达到符合代码逻辑思维习惯、简化状态控制导致的逻辑复杂性、便于调试查错的效果,从而可以增加编程的效率和可靠性。
以上,仅为本发明之较佳实施例,意在进一步说明本发明,而非对其进行限定。凡根据上述之文字和附图所公开内容进行的简单替换,都在本专利的权利保护范围之列。
Claims (10)
1.一种单片机实时任务与耗时任务并行执行的实现方法,其特征在于,包括以下步骤:将所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现里把所有实时任务依次调用一次;将耗时任务划分为若干个执行步骤,对应于每个执行步骤至少植入一次该实时任务调用函数的调用。
2.根据权利要求1所述的实现方法,其特征在于:计算所述耗时任务中各执行步骤所需要的时间,并根据各执行步骤所需要的时间长短而决定将实时任务调用函数植入所述耗时任务的具体执行步骤中。
3.根据权利要求2所述的实现方法,其特征在于:所述耗时任务中各执行步骤所需要时间的计算通过时间统计代码实现。
4.根据权利要求1所述的实现方法,其特征在于:所述耗时任务按照函数流程编写功能代码。
5.根据权利要求1所述的实现方法,其特征在于:植入所述实时任务调用函数时,保证相邻两次实时任务调用函数的调用之间所耗费的时间足够短,以便保证实时任务的实时性。
6.根据权利要求1所述的实现方法,其特征在于:在耗时任务需要等待实时任务的执行结果时,反复调用所述实时任务调用函数,以至所期待结果出现或者超时才继续执行后续流程。
7.根据权利要求1所述的实现方法,其特征在于:所述实时任务调用函数包括执行以下步骤:执行定时任务、执行发送报文、执行接收并解析报文以及执行喂狗。
8.根据权利要求1至7中任一项所述的实现方法,其特征在于:所述单片机不支持实时操作系统。
9.一种单片机实时任务与耗时任务并行执行的实现系统,包括耗时任务模块、实时任务模块和中断任务模块,其特征在于:所述耗时任务模块位于系统最上层,所述实时任务模块位于系统中间层,中断任务位于系统最底层;
所述实时任务模块的所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现中把所有实时任务依次调用一次;
所述耗时任务模块将耗时任务划分为若干个执行步骤,对应于耗时任务执行步骤至少植入一次该实时任务调用函数的调用。
10.根据权利要求9所述的实现系统,其特征在于:所述实时任务模块包括依次连接的用于更新定时任务计数器的定时任务子模块、用于发送报文的发送报文子模块、用于接收并解析报文的接收并解析报文子模块和用于喂狗的喂狗子模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410362872.2A CN104102491B (zh) | 2014-07-28 | 2014-07-28 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410362872.2A CN104102491B (zh) | 2014-07-28 | 2014-07-28 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104102491A true CN104102491A (zh) | 2014-10-15 |
CN104102491B CN104102491B (zh) | 2017-07-14 |
Family
ID=51670669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410362872.2A Active CN104102491B (zh) | 2014-07-28 | 2014-07-28 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104102491B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106062716A (zh) * | 2016-06-02 | 2016-10-26 | 百富计算机技术(深圳)有限公司 | 在单任务系统中实现多任务的方法、装置及单任务系统 |
CN109165086A (zh) * | 2018-08-13 | 2019-01-08 | 深圳市特康生物工程有限公司 | 任务执行方法及单片机 |
CN110347427A (zh) * | 2019-07-08 | 2019-10-18 | 北京明略软件系统有限公司 | 网页代码的优化方法及装置 |
CN111913790A (zh) * | 2020-07-03 | 2020-11-10 | 佛山市顺德区美的洗涤电器制造有限公司 | 任务调度方法、装置、家用电器和计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1409209A (zh) * | 2001-09-24 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种多任务实时操作系统的实现方法 |
US6964048B1 (en) * | 1999-04-14 | 2005-11-08 | Koninklijke Philips Electronics N.V. | Method for dynamic loaning in rate monotonic real-time systems |
CN102662670A (zh) * | 2012-04-05 | 2012-09-12 | 林添孝 | 一种场景式无核嵌入式实时操作系统的实现方法 |
CN102722402A (zh) * | 2012-05-28 | 2012-10-10 | 上海微频莱机电科技有限公司 | 一种非抢占式实时调度多任务的处理系统及方法 |
CN103257892A (zh) * | 2013-05-27 | 2013-08-21 | 北京世纪瑞尔技术股份有限公司 | 一种基于宏组合的多任务调度方法及系统 |
-
2014
- 2014-07-28 CN CN201410362872.2A patent/CN104102491B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6964048B1 (en) * | 1999-04-14 | 2005-11-08 | Koninklijke Philips Electronics N.V. | Method for dynamic loaning in rate monotonic real-time systems |
CN1409209A (zh) * | 2001-09-24 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种多任务实时操作系统的实现方法 |
CN102662670A (zh) * | 2012-04-05 | 2012-09-12 | 林添孝 | 一种场景式无核嵌入式实时操作系统的实现方法 |
CN102722402A (zh) * | 2012-05-28 | 2012-10-10 | 上海微频莱机电科技有限公司 | 一种非抢占式实时调度多任务的处理系统及方法 |
CN103257892A (zh) * | 2013-05-27 | 2013-08-21 | 北京世纪瑞尔技术股份有限公司 | 一种基于宏组合的多任务调度方法及系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106062716A (zh) * | 2016-06-02 | 2016-10-26 | 百富计算机技术(深圳)有限公司 | 在单任务系统中实现多任务的方法、装置及单任务系统 |
WO2017206151A1 (zh) * | 2016-06-02 | 2017-12-07 | 百富计算机技术(深圳)有限公司 | 在单任务系统中实现多任务的方法、装置及单任务系统 |
CN106062716B (zh) * | 2016-06-02 | 2019-11-29 | 百富计算机技术(深圳)有限公司 | 在单任务系统中实现多任务的方法、装置及单任务系统 |
US10782999B2 (en) | 2016-06-02 | 2020-09-22 | Pax Computer Technology (Shenzhen) Co., Ltd. | Method, device, and single-tasking system for implementing multi-tasking in single-tasking system |
CN109165086A (zh) * | 2018-08-13 | 2019-01-08 | 深圳市特康生物工程有限公司 | 任务执行方法及单片机 |
CN110347427A (zh) * | 2019-07-08 | 2019-10-18 | 北京明略软件系统有限公司 | 网页代码的优化方法及装置 |
CN111913790A (zh) * | 2020-07-03 | 2020-11-10 | 佛山市顺德区美的洗涤电器制造有限公司 | 任务调度方法、装置、家用电器和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104102491B (zh) | 2017-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176801B (zh) | 一种多进程管理方法、装置、设备及存储介质 | |
CN101556545B (zh) | 一种实现进程支持的方法、装置和多线程系统 | |
CN108897610B (zh) | 任务调度方法、装置、计算机设备和存储介质 | |
US20160378570A1 (en) | Techniques for Offloading Computational Tasks between Nodes | |
US20150100832A1 (en) | Method and system for selecting and executing test scripts | |
CN102193853A (zh) | 虚拟机监控器及其调度方法 | |
CN102541630B (zh) | 计算机处理器中线程间数据通信的方法和系统 | |
CN104102491A (zh) | 单片机实时任务与耗时任务并行执行的实现方法和系统 | |
US20150100830A1 (en) | Method and system for selecting and executing test scripts | |
CN106557369A (zh) | 一种多线程的管理方法及系统 | |
US20130198758A1 (en) | Task distribution method and apparatus for multi-core system | |
CN103595770B (zh) | Sdk实现文件下载的方法与装置 | |
US20150100831A1 (en) | Method and system for selecting and executing test scripts | |
CN101916200B (zh) | 终端升级的方法、终端升级回退的方法和升级管理中心 | |
CN102622289A (zh) | 程序设置方法、程序监控方法与装置、系统 | |
CN101751288A (zh) | 应用进程调度的方法、设备及系统 | |
CN105094973A (zh) | 基于敏感指令替换的ada程序分区运行支持系统 | |
US7565659B2 (en) | Light weight context switching | |
US11951999B2 (en) | Control unit for vehicle and error management method thereof | |
CN112685160A (zh) | 定时任务的调度方法、装置,终端设备及计算机存储介质 | |
CN109101340B (zh) | 弹幕消息的动态分发方法、装置、设备和存储介质 | |
CN114995226A (zh) | 一种针对航天嵌入式设备的流程控制系统及方法 | |
CN103019819A (zh) | 一种基于插件机制的动态库统一调度方法 | |
CN114610440A (zh) | 模拟机系统的运行环境构建方法及系统 | |
CN104951346A (zh) | 一种用于嵌入式系统的进程管理方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20170531 Address after: Nanshan District Xueyuan Road in Shenzhen city Guangdong province 518000 1001 Nanshan Chi Yuen Building 15 layer A5 Applicant after: Shenzhen Aerospace Industry Technology Inst Co Ltd Address before: 518048 Guangdong, Shenzhen, Shennan Road, Astronautics Hotel, block B, building 5, building 4019 Applicant before: Aerospace Science & Industry Shenzhen (Group) Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |