[发明专利]单片机实时任务与耗时任务并行执行的实现方法和系统有效
申请号: | 201410362872.2 | 申请日: | 2014-07-28 |
公开(公告)号: | CN104102491B | 公开(公告)日: | 2017-07-14 |
发明(设计)人: | 胡柏华 | 申请(专利权)人: | 深圳航天工业技术研究院有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/38 |
代理公司: | 深圳市睿智专利事务所44209 | 代理人: | 郭文姬,罗兴元 |
地址: | 518000 广东省深圳市南*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 单片机 实时 任务 耗时 并行 执行 实现 方法 系统 | ||
技术领域
本发明涉及单片机的程序运行管理,特别是与单片机的实时任务与耗时任务的协调有关。
背景技术
实时任务是指不可阻塞、不可拖延和响应及时的任务,通常包括通信协议报文处理、定时任务及喂狗等,这类任务处理函数非常快速,运行时间短。耗时任务是指有内在处理逻辑、有特定执行顺序、且需要耗费较长时间才能执行完成的任务,这类任务属于应用层次,不要求实时性,但必须保证执行的顺序。
现有单片机环境中通常使用两种方式实现实时任务和耗时任务的并行执行。一种使用RTOS(实时操作系统),由实时操作系统提供中断级别的分时多任务,程序中只需调用RT库提供的API创建新任务,即可实现实时任务和耗时任务的并行运行。另一种不使用RTOS,参见图2,其是把耗时任务原始执行逻辑分解成若干个耗时较小的执行步骤1、2…N;参见图1,其在入口main()函数中使用无限循环,实时任务的处理大致包括定时任务、发送报文、接收并解释报文和喂狗等;参见图3,每次循环只调用耗时任务的一个步骤,下次循环调用下一个步骤,以此在不影响系统实时响应的基础上模拟出耗时任务也在并行运行的效果。
在有条件的单片机上,例如有足够大的RAM(随机存取存储器)和存储空间的情况下,第一选择都是使用RTOS,毕竟由库提供的多任务环境极大地减少了编写多任务程序的难度和复杂度,尤其是调试代码时指令执行逻辑清晰,调用栈跟踪方便,很容易根据调用上下文查错和纠错,但由于涉及到任务调度、TCB(任务控制块)数据分配及数据同步处理等因素,需要占用额外的内存和处理器资源,也相应增加了同步处理的复杂性。
而且由于成本的因素,存在大量如下的单片机类型:一种是存储空间非常有限,比如:只有几K字节甚至几百字节的RAM,无法满足RTOS所需要的基本存储需求;另一种是单片机厂商未提供对应的RTOS。对于这样的单片机类型,只能选择任务分解方式提供模拟多任务效果,这种方式必须打乱程序逻辑结构,且需要增加额外的变量空间来记住任务的当前执行步骤,在下一个循环周期能从记忆的执行步骤中恢复状态以便继续执行剩余的步骤;此方式会明显增加程序逻辑的复杂度,状态转换极易出错,且由于完全丢失了调用上下文关系,导致出错时难以确定故障来源,增加了纠错和维护的成本。
发明内容
本发明要解决的技术问题在于避免现有技术中无法使用RTOS的单片机软件的情况下,而所存在的实时和耗时任务执行需要占用额外的内存和处理器资源、同步处理复杂,或者程序逻辑复杂、状态转换容易出错、纠错和维护成本高等不足之处,而提出一种单片机实时任务与耗时任务并行执行的实现方法。
针对上述要解决的技术问题,本发明的技术方案如下:
一种单片机实时任务与耗时任务并行执行的实现方法,包括以下步骤:将所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现里把所有实时任务依次调用一次;将耗时任务划分为若干个执行步骤,对应于每个执行步骤至少植入一次该实时任务调用函数的调用。
进一步地,计算所述耗时任务中各执行步骤所需要的时间,并根据各执行步骤所需要的时间长短而决定将实时任务调用函数植入所述耗时任务的具体执行步骤中。
进一步地,所述耗时任务中各执行步骤所需要时间的计算通过时间统计代码实现。
进一步地,所述耗时任务按照函数流程编写功能代码。
进一步地,植入所述实时任务调用函数时,保证相邻两次实时任务调用函数的调用之间所耗费的时间足够短,以便保证实时任务的实时性。
进一步地,在耗时任务需要等待实时任务的执行结果时,反复调用所述实时任务调用函数,以至所期待结果出现或者超时才继续执行后续流程。
进一步地,所述实时任务调用函数包括执行一下步骤:执行定时任务、执行发送报文、执行接收并解析报文以及执行喂狗。
进一步地,所述单片机不支持实时操作系统。
一种单片机实时任务与耗时任务并行执行的实现系统,包括耗时任务模块、实时任务模块和中断任务模块,所述耗时任务模块位于系统最上层,所述实时任务模块位于系统中间层,中断任务位于系统最底层;所述实时任务模块的所有实时任务打包成一个实时任务调用函数,在该实时任务调用函数的实现中把所有实时任务依次调用一次;所述耗时任务模块将耗时任务划分为若干个执行步骤,对应于耗时任务执行步骤至少植入一次该实时任务调用函数的调用。
进一步地,所述实时任务模块包括依次连接的用于更新定时任务计数器的定时任务子模块、用于发送报文的发送报文子模块、用于接收并解析报文的接收并解析报文子模块和用于喂狗的喂狗子模块。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳航天工业技术研究院有限公司,未经深圳航天工业技术研究院有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410362872.2/2.html,转载请声明来源钻瓜专利网。