CN108536531A - 一种基于单片机的任务调度和电源管理方法 - Google Patents
一种基于单片机的任务调度和电源管理方法 Download PDFInfo
- Publication number
- CN108536531A CN108536531A CN201810291115.9A CN201810291115A CN108536531A CN 108536531 A CN108536531 A CN 108536531A CN 201810291115 A CN201810291115 A CN 201810291115A CN 108536531 A CN108536531 A CN 108536531A
- Authority
- CN
- China
- Prior art keywords
- task
- subtask
- interrupt processing
- list
- power supply
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4818—Priority circuits therefor
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Power Sources (AREA)
- Microcomputers (AREA)
Abstract
本发明公开了一种基于单片机的任务调度和电源管理方法,属于自动控制技术领域,该任务调度方法主要是通过时钟周期性的触发中断处理函数,中断处理函数轮询注册任务,获取满足等待时间和最高优先级条件的任务,Task并执行其上半部,把耗时操作作为下半部SubTask挂载到WorkSet队列中;在系统空闲运行期间,主循环函数不间断的运行去执行子任务队列WorkSet里面的子任务SubTask;当电源管理任务开始运行时,检查任务状态表中是否所有位都处在Suspend状态,若是,则进入系统休眠;若否,则等待下一轮电源管理任务运行周期执行。该任务调度方法能及时响应所有中断,处理紧急事件,还能有效利用空闲资源处理费时任务。
Description
技术领域
本发明属于自动控制技术领域,具体涉及一种基于单片机的任务调度和电源管理方法。
背景技术
上下文处理是任务调度的一个原则,把需要紧急处理的且相对不耗时的处理放在任务的上文,然后耗时长的处理放在任务的下文。当处理完当前任务的上文后,在单片机没有接收到中断的空闲时间就根据下文优先级来处理下文任务。
中断处理函数可以打断比其优先级低的中断函数或者业务流程,当处理完中断函数后会继续执行原来的代码。在单片机中依赖于每一毫秒触发一次的时钟中断,来做任务的调度。
系统休眠的触发条件是当前再也没有活跃的任务,而电源管理本身也是作为一个任务系统里面的子任务运行在调度规则中,也就是说当轮到电源管理任务运行时,不会有其他任务打断其运行,则可以判断任务状态表中的状态来决定是否进入系统休眠。
目前大多数单片机是根据硬件中断来处理任务全部内容的,如果遇到耗时较大的任务,此时就会霸占着CPU的资源导致无法响应其他中断;当系统需要休眠时,往往缺乏对资源的保护而直接对资源进行释放然后模块下电,这会导致模块数据有几率处理不完然后强迫下电而产生异常。
发明内容
本发明实施方式的目的在于提供一种基于单片机的任务调度和电源管理方法,能够较好的改善上述问题。
本发明的实施方式是这样实现的:
本发明的实施方式提供了一种基于单片机的任务调度和电源管理方法,该单片机程序中设有主循环函数和中断处理函数,该任务调度方法包括以下步骤:
S1:对系统环境进行初始化,建立注册任务,注册任务中包括至少一个任务列表List;
S2:通过时钟周期性的触发中断处理函数,中断处理函数轮询注册任务,获取满足条件的任务列表List,任务列表List中包括多个任务Task,然后中断处理函数再轮询任务列表List并获取任务列表List中优选级最高的任务TaskA,在中断处理函数内运行任务TaskA;
S3:在任务TaskA被执行期间,对执行任务TaskA的耗时进行判断,若执行任务TaskA的耗时少于设定值,则执行完任务TaskA后退出中断处理函数;若执行任务TaskA的耗时多于设定值,则将任务TaskA分成多个子任务SubTask并挂载到子任务队列WorkSet中,同时记录子任务SubTask的索引,当任务TaskA挂载完子任务SubTask后,退出中断处理函数;
S4:在系统空闲运行期间,主循环函数不间断的运行去执行子任务队列WorkSet里面的子任务SubTask;
S5:用若干个字节的每个位记录对应的任务Task或者子任务SubTask的状态并生成任务状态表,任务Task或者子任务SubTask的状态包括Running状态和Suspend状态;
S6:在系统运行期间,当轮到某个任务Task运行时,任务Task首先在对应的任务状态表中把自身的状态设置为Running,然后判断是否存在子任务SubTask,若没有,则在运行完任务代码后把状态表对应项设置为Suspend;若存在子任务SubTask,则轮询所有子任务SubTask的状态,判断是否都已经执行完成,若是,则重新挂载下一轮新的子任务,然后把自身状态设置为Suspend,若否,则退出当前任务并继续中断前的主循环操作;
S7:当电源管理任务开始运行时,检查任务状态表中是否所有位都处在Suspend状态,若是,则进入系统休眠;若否,则等待下一轮电源管理任务运行周期执行。
进一步的,在步骤S2中,时钟触发中断处理函数的周期为1毫秒。
进一步的,在步骤S2中,TaskA在中断处理函数内运行时,不会被其他时钟触发中断处理函数而中断。
进一步的,在步骤S4中,具体操作为:通过主循环函数判断当前子任务队列WorkSet是否为空,若是,则继续轮询,若否,则轮询所有子任务SubTask里面最高优先级类别的子任务列表SubTaskList,在SubTaskList中找出等待时间最长的子任务SubTask,然后执行子任务SubTask,执行完子任务SubTask后释放子任务SubTask。
进一步的,步骤S5中的子任务SubTask状态是指有业务需求需要电源管理模块特别判断的子任务。
进一步的,在步骤S7中,当任务状态表所有有效位都为Suspend状态时,最长延时一个电源管理任务周期执行系统休眠。
进一步的,在步骤S7中,电源管理任务的运行周期在所有任务中是最长的。
本发明的有益效果为:
1、能及时响应所有中断,处理紧急事件,另一方面还能有效利用空闲资源处理费时任务。
2、免除全局系统锁,任务自身管理自己的状态。
3、确立电源管理框架,易于扩展新功能。
4、任务状态表可以用于调试跟踪低功耗或者任务调度。
附图说明
图1为本发明的中断触发流程图;
图2为任务执行流程图;
图3为任务状态管理流程图;
图4为电源管理流程图。
具体实施方式
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述。显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。
本发明实施方式提供了一种基于单片机的任务调度和电源管理方法,单片机程序中设有主循环函数和中断处理函数,该任务调度方法包括以下步骤:
S1:对系统环境进行初始化,建立注册任务,注册任务中包括至少一个任务列表List。
S2:参考图1所示,通过时钟周期性的触发中断处理函数,中断处理函数轮询所有的注册任务,获取满足条件的任务列表List,任务列表List中包括多个任务Task,然后中断处理函数再轮询任务列表List并获取任务列表List中优选级最高的任务,比如是任务TaskA,然后在中断处理函数内运行任务TaskA;
需要说明的是,时钟触发中断处理函数的周期为1毫秒。
还需要说明的是,TaskA在中断处理函数内运行时,不会被其他时钟触发中断处理函数而中断。
S3:参考图2所示,在任务TaskA被执行期间,对执行任务TaskA的耗时进行判断,若执行任务TaskA的耗时少于设定值,则执行完任务TaskA后退出中断处理函数;若执行任务TaskA的耗时多于设定值,则将任务TaskA分成多个子任务SubTask并挂载到子任务队列WorkSet中,同时记录子任务SubTask的索引,当任务TaskA挂载完子任务SubTask后,退出中断处理函数。
子任务SubTask包括SubTask1、SubTask2等。
S4:再次参考图2所示,在系统运行期间,主循环函数不间断的运行去执行子任务队列WorkSet里面的子任务SubTask。
具体操作为:通过主循环函数判断当前子任务队列WorkSet是否为空,若是,则继续轮询,若否,则轮询所有子任务SubTask里面最高优先级类别的子任务列表SubTaskList,在SubTaskList中找出等待时间最长的子任务SubTask,然后执行子任务SubTask,执行完子任务SubTask后释放子任务SubTask。
S5:用若干个字节的每个位记录对应的任务Task或者子任务SubTask的状态并生成任务状态表,任务Task或者子任务SubTask的状态包括Running状态和Suspend状态。其中子任务SubTask状态是指有业务需求需要电源管理模块特别判断的子任务。
任务状态表如下表所示
TaskA | TaskB | TaskC | ... | SubTask1 | SubTask2 | ... | 预留 |
S6:参考图3所示,在系统运行期间,当轮到某个任务Task运行时,任务Task首先在对应的任务状态表中把自身的状态设置为Running,然后判断是否存在子任务SubTask,若没有,则在运行完任务代码后把状态表对应项设置为Suspend;若存在子任务SubTask,则轮询所有子任务SubTask的状态,判断是否都已经执行完成,若是,则重新挂载下一轮新的子任务,然后把自身状态设置为Suspend,若否,则退出当前任务并继续中断前的主循环操作。
S7:参考图4所示,当电源管理任务开始运行时,检查任务状态表中是否所有位都处在Suspend状态,若是,则进入系统休眠;若否,则等待下一轮电源管理任务运行周期执行。
需要说明的是,当任务状态表所有有效位都为Suspend状态时,最长延时一个电源管理任务周期执行系统休眠。
还需要说明的是,电源管理任务的运行周期在所有任务中是最长的,这样才能保证其运行能覆盖到所有任务的状态变换周期。
本发明不局限于上述可选实施方式,基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
Claims (7)
1.一种基于单片机的任务调度和电源管理方法,其特征在于:单片机程序中设有主循环函数和中断处理函数,该任务调度方法包括以下步骤:
S1:对系统环境进行初始化,建立注册任务,注册任务中包括至少一个任务列表List;
S2:通过时钟周期性的触发中断处理函数,中断处理函数轮询注册任务,获取满足条件的任务列表List,任务列表List中包括多个任务Task,然后再轮询任务列表List并获取任务列表List中优选级最高的任务TaskA,在中断处理函数内运行任务TaskA;
S3:在任务TaskA被执行期间,对执行任务TaskA的耗时进行判断,若执行任务TaskA的耗时少于设定值,则执行完任务TaskA后退出中断处理函数;若执行任务TaskA的耗时多于设定值,则将任务TaskA分成多个子任务SubTask并挂载到子任务队列WorkSet中,同时记录子任务SubTask的索引,当任务TaskA挂载完子任务SubTask后,退出中断处理函数;
S4:在系统空闲运行期间,主循环函数不间断地运行去执行子任务队列WorkSet里面的子任务SubTask;
S5:用若干个字节的每个位记录对应的任务Task或者子任务SubTask的状态并生成任务状态表,任务Task或者子任务SubTask的状态包括Running状态和Suspend状态;
S6:在系统运行期间,当轮到某个任务Task运行时,任务Task首先在对应的任务状态表中把自身的状态设置为Running,然后判断是否存在子任务SubTask,若没有,则在运行完任务代码后把状态表对应项设置为Suspend;若存在子任务SubTask,则轮询所有子任务SubTask的状态,判断是否都已经执行完成,若是,则重新挂载下一轮新的子任务,然后把自身状态设置为Suspend,若否,则退出当前任务并继续中断前的主循环操作;
S7:当电源管理任务开始运行时,检查任务状态表中是否所有位都处在Suspend状态,若是,则进入系统休眠;若否,则等待下一轮电源管理任务运行周期执行。
2.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:在步骤S2中,时钟触发中断处理函数的周期为1毫秒。
3.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:在步骤S2中,TaskA在中断处理函数内运行时,不会被其他时钟触发中断处理函数而中断。
4.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:在步骤S4中,具体操作为:通过主循环函数判断当前子任务队列WorkSet是否为空,若是,则继续轮询,若否,则轮询所有子任务SubTask里面最高优先级类别的子任务列表SubTaskList,在SubTaskList中找出等待时间最长的子任务SubTask,然后执行子任务SubTask,执行完子任务SubTask后释放子任务SubTask。
5.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:步骤S5中的子任务SubTask状态是指有业务需求需要电源管理模块特别判断的子任务。
6.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:在步骤S7中,当任务状态表所有有效位都为Suspend状态时,最长延时一个电源管理任务周期执行系统休眠。
7.根据权利要求1所述的基于单片机的任务调度和电源管理方法,其特征在于:在步骤S7中,电源管理任务的运行周期在所有任务中是最长的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810291115.9A CN108536531B (zh) | 2018-04-03 | 2018-04-03 | 一种基于单片机的任务调度和电源管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810291115.9A CN108536531B (zh) | 2018-04-03 | 2018-04-03 | 一种基于单片机的任务调度和电源管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536531A true CN108536531A (zh) | 2018-09-14 |
CN108536531B CN108536531B (zh) | 2021-08-06 |
Family
ID=63482100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810291115.9A Active CN108536531B (zh) | 2018-04-03 | 2018-04-03 | 一种基于单片机的任务调度和电源管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536531B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109784647A (zh) * | 2018-12-14 | 2019-05-21 | 兰州空间技术物理研究所 | 一种用于空间站的主动电位控制系统的任务调度方法 |
CN110794759A (zh) * | 2019-10-29 | 2020-02-14 | 北京和利时智能技术有限公司 | 一种plc任务调度方法和装置 |
CN110806712A (zh) * | 2019-12-02 | 2020-02-18 | 宁波德晶元科技有限公司 | 一种适用于单片机的低功耗运行方法与系统 |
CN111628686A (zh) * | 2020-05-28 | 2020-09-04 | 上海中科深江电动车辆有限公司 | 纯电动汽车用永磁同步电机时序任务调度和空间状态调度协同控制系统 |
CN112905244A (zh) * | 2020-12-22 | 2021-06-04 | 金卡智能集团股份有限公司 | 仪表控制方法、装置和设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030105721A1 (en) * | 1995-02-13 | 2003-06-05 | Intertrust Technologies Corp. | Systems and methods for secure transaction management and electronic rights protection |
US20050188131A1 (en) * | 2004-02-24 | 2005-08-25 | Denso Corporation | Microcomputer and emulation apparatus |
CN1687901A (zh) * | 2005-06-09 | 2005-10-26 | 华东师范大学 | 基于中断的实时任务调度方法 |
CN101706739A (zh) * | 2009-12-03 | 2010-05-12 | 山东科技大学 | 一种实时操作系统uCOS-Ⅱ的任务调度算法的硬件实现方法 |
CN102710758A (zh) * | 2012-05-22 | 2012-10-03 | 苏州云博信息技术有限公司 | 一种基于单片机系统的数据流断点续传方法 |
CN106708536A (zh) * | 2017-01-12 | 2017-05-24 | 南京大学 | 一种中断驱动系统程序生成和分析方法 |
-
2018
- 2018-04-03 CN CN201810291115.9A patent/CN108536531B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030105721A1 (en) * | 1995-02-13 | 2003-06-05 | Intertrust Technologies Corp. | Systems and methods for secure transaction management and electronic rights protection |
US20050188131A1 (en) * | 2004-02-24 | 2005-08-25 | Denso Corporation | Microcomputer and emulation apparatus |
CN1687901A (zh) * | 2005-06-09 | 2005-10-26 | 华东师范大学 | 基于中断的实时任务调度方法 |
CN101706739A (zh) * | 2009-12-03 | 2010-05-12 | 山东科技大学 | 一种实时操作系统uCOS-Ⅱ的任务调度算法的硬件实现方法 |
CN102710758A (zh) * | 2012-05-22 | 2012-10-03 | 苏州云博信息技术有限公司 | 一种基于单片机系统的数据流断点续传方法 |
CN106708536A (zh) * | 2017-01-12 | 2017-05-24 | 南京大学 | 一种中断驱动系统程序生成和分析方法 |
Non-Patent Citations (2)
Title |
---|
JI-YONG UM ET AL.: "A single-chip time-interrupt 32-channel analog beamformer for ultrasound medical imaging", 《IEEE ASIAN SOLID-STATE CIRCUITS CONFERENCE》 * |
高国胜 等: "单片机系统的实时多任务机制研究", 《舰船电子工程》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109784647A (zh) * | 2018-12-14 | 2019-05-21 | 兰州空间技术物理研究所 | 一种用于空间站的主动电位控制系统的任务调度方法 |
CN110794759A (zh) * | 2019-10-29 | 2020-02-14 | 北京和利时智能技术有限公司 | 一种plc任务调度方法和装置 |
CN110794759B (zh) * | 2019-10-29 | 2021-06-22 | 北京和利时智能技术有限公司 | 一种plc任务调度方法和装置 |
CN110806712A (zh) * | 2019-12-02 | 2020-02-18 | 宁波德晶元科技有限公司 | 一种适用于单片机的低功耗运行方法与系统 |
CN111628686A (zh) * | 2020-05-28 | 2020-09-04 | 上海中科深江电动车辆有限公司 | 纯电动汽车用永磁同步电机时序任务调度和空间状态调度协同控制系统 |
CN111628686B (zh) * | 2020-05-28 | 2023-06-16 | 上海中科深江电动车辆有限公司 | 永磁同步电机时序任务调度和空间状态调度协同控制系统 |
CN112905244A (zh) * | 2020-12-22 | 2021-06-04 | 金卡智能集团股份有限公司 | 仪表控制方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108536531B (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536531A (zh) | 一种基于单片机的任务调度和电源管理方法 | |
CN106980546B (zh) | 一种任务异步执行方法、装置及系统 | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN101246437B (zh) | 一种嵌入式实时系统进程均衡调度方法 | |
CN102902583B (zh) | 在挂起状态和执行状态下管理进程 | |
CN103092682A (zh) | 异步网络应用程序处理方法 | |
CN111625331B (zh) | 任务调度方法、装置、平台、服务器及存储介质 | |
CN108491311A (zh) | 一种实时操作系统的看门狗监测方法及终端 | |
CN101957751A (zh) | 一种状态机的实现方法及装置 | |
CN101452404A (zh) | 一种嵌入式操作系统的任务调度装置及方法 | |
CN109558227B (zh) | 一种基于任务执行预算的单调速率任务调度方法 | |
CN101196836A (zh) | 一种控制看门狗电路复位的方法和装置 | |
CN102999384B (zh) | 在挂起状态和执行状态下管理进程 | |
CN103218264A (zh) | 基于线程池的多线程有限状态机切换方法及装置 | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN105373425A (zh) | 一种嵌入式Linux系统性能优化的方法及装置 | |
CN101968749B (zh) | 虚拟机过度分配环境下的mpi消息接收方法 | |
CN111475312B (zh) | 基于实时操作系统的消息驱动方法和装置 | |
CN106802825B (zh) | 一种基于实时系统的动态任务调度方法与系统 | |
CN112506808B (zh) | 测试任务执行方法、计算设备、计算系统和存储介质 | |
CN109032769A (zh) | 一种基于容器的持续集成ci任务处理方法及装置 | |
CN109947015B (zh) | 任务的执行方法及主控制器 | |
CN101937371A (zh) | 一种嵌入式系统中监控任务执行状态的方法及装置 | |
CN110457120A (zh) | 基于osek嵌入式实时操作系统的非周期定时器驻留机制 | |
CN106354553A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20190321 Address after: 510000 First Floor of R&D and Testing Complex Building No. 381 Xingang Middle Road, Haizhu District, Guangzhou City, Guangdong Province (Office Only) Applicant after: Guangzhou Technological Image Technology Co., Ltd. Address before: 510000 No. 381 Xingang Middle Road, Guangzhou, Guangdong Province Applicant before: 17th Research Institute of China Electronics Technology Group Corporation |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |