CN108536527A - 一种嵌入式软件的任务调度方法及装置 - Google Patents
一种嵌入式软件的任务调度方法及装置 Download PDFInfo
- Publication number
- CN108536527A CN108536527A CN201810128162.1A CN201810128162A CN108536527A CN 108536527 A CN108536527 A CN 108536527A CN 201810128162 A CN201810128162 A CN 201810128162A CN 108536527 A CN108536527 A CN 108536527A
- Authority
- CN
- China
- Prior art keywords
- task
- event
- logic
- index
- processor
- 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/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式软件的任务调度方法及装置,按照具体应用划分若干逻辑任务,这些逻辑任务共享一个系统栈,每个逻辑任务都有自己的事件队列和任务处理程序,任务之间通过发送事件的形式进行通信;本发明既避免了加载操作系统对系统RAM资源和MCU计算资源的消耗,同时实现类似于操作系统的任务调度机制。
Description
技术领域
本发明属于嵌入式系统的技术领域,尤其是涉及一种嵌入式软件的任务调度方法及装置。
背景技术
在嵌入式系统的软件设计中,根据具体应用要求和系统资源大小,选择合适的嵌入式操作系统,针对嵌入式系统的MCU进行移植,根据应用逻辑划分任务,然后利用操作系统提供的一系列API,建立任务队列,以消息或事件的形式进行任务间通信,管理系统滴答,实现任务调度,这种设计方式可以让开发人员将精力集中在应用逻辑的开发上,不仅可以实现软件的模块化,还可以灵活地进行修改和维护。
一般而言,在这种方式下,MCU上电初始化时首先建立任务队列,为每个任务设定合适的优先级,分配一定的堆栈用于存储任务上下文。在系统运行阶段,系统滴答、发送消息或事件、各种系统中断都会触发任务调度,当任务队列中存在准备就绪的新任务时,执行任务切换。切换任务时,首先要将当前任务的上下文数据(MCU中的各类寄存器和系统栈)保存到当前任务的堆栈中,然后将新任务的堆栈恢复到MCU各类寄存器和系统栈中,根据新的PC(程序计数器)指针执行新任务。
为每个任务堆栈分配一定的RAM资源存储上下文会消耗宝贵的RAM资源,当系统中存在大量频繁的中断时,上下文的存储和恢复会极大消耗MCU的计算资源,因此,只有在RAM资源丰富、主频高的高端MCU中才选择使用操作系统。在那些由于成本限制只能选择RAM资源较小、主频较低的中低端MCU的嵌入式系统的软件设计中,只能采用不加操作系统的裸机方式。
在传统的裸机开发方式中,只存在一个系统栈,MCU循环调用由各种软件模块组成的主循环体,发生中断时,MCU将一些局部变量、中间计算结果和寄存器存入系统栈,执行完中断处理程序后恢复系统栈,继续执行中断前的程序指令。在这种方式下,一般以大量的全局变量和标志位实现各个软件模块的交互,造成各个软件模块之间耦合性强,修改和维护不灵活。
综上所述,现有技术中如何避免加载操作系统对RAM资源的消耗、避免任务上下文切换对MCU计算资源的消耗,以及如何降低软件模块间的耦合性、方便软件修改和维护的问题,尚缺乏行之有效的解决方案。
发明内容
针对现有技术中存在的不足,解决现有技术中如何避免加载操作系统对RAM资源的消耗、避免任务上下文切换对MCU计算资源的消耗,以及如何降低软件模块间的耦合性、方便软件修改和维护的问题,本发明提出了一种嵌入式软件的任务调度方法及装置,按照具体应用划分若干逻辑任务,这些逻辑任务共享一个系统栈,每个逻辑任务都有自己的事件队列和任务处理程序,任务之间通过发送事件的形式进行通信;本发明既避免了加载操作系统对系统RAM资源和MCU计算资源的消耗,同时实现类似于操作系统的任务调度机制。
本发明的第一目的是提供一种嵌入式软件的任务调度方法。
为了实现上述目的,本发明采用如下一种技术方案:
一种嵌入式软件的任务调度方法,该方法包括:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
作为进一步的优选方案,所述逻辑任务根据具体应用进行划分。
作为进一步的优选方案,所述逻辑任务结构体还包括事件队列的引用下标,引用下标包括事件产生索引和事件消费索引,所述事件产生索引用于索引事件队列中填充的事件,所述事件消费索引用于索引执行的事件。
作为进一步的优选方案,所述任务ID为预先定义的8位整形数据,最大定义256个逻辑任务;逻辑任务优先级等于任务ID,任务ID的数值越大,其对应的逻辑任务的优先级越高。
作为进一步的优选方案,所述事件为预先定义的16位整型数据,0代表空事件,最大可定义65536种事件;所述事件队列为预先定义的16位整型数组。
作为进一步的优选方案,在该方法中,按照逻辑任务优先级从低到高的顺序初始化MCU,将各个逻辑任务结构体的事件队列数组成员初始化为0,事件产生索引和事件消费索引初始化为0后,进入主循环体。
作为进一步的优选方案,在该方法中,向逻辑任务结构体中填充事件的填充方法为:
将事件赋值给以该逻辑任务结构体的事件产生索引为引用下标的事件队列数组成员,并更新事件产生索引。
作为进一步的优选方案,在该方法中,任务处理程序的执行方法为:
判断该任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件,
若存在,读取以该逻辑任务结构体的事件消费索引为引用下标的事件队列数组成员,根据具体事件执行相关操作,更新事件消费索引,返回上一判断步骤;
否则,判断当前逻辑任务优先级是否为最低,若是,退出任务调度程序,返回进入主循环体中执行其它程序,否则,执行下一个优先级更低的逻辑任务的任务处理程序。
作为进一步的优选方案,在该方法中,所述事件产生索引的更新方法为:将事件产生索引加一,若事件产生索引的索引值等于事件队列数组的长度,将事件产生索引置零;
所述事件消费索引的更新方法为:将事件消费索引加一,若事件消费索引的索引值等于事件队列数组的长度,将事件消费索引置零。
作为进一步的优选方案,在该方法中,判断任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件的方法为:
比较事件产生索引和事件消费索引,若两者相等,则事件队列中不存在未被处理的事件,若不相等,则存在未被处理的事件。
本发明的第二目的是提供一种计算机可读存储介质。
为了实现上述目的,本发明采用如下一种技术方案:
一种计算机可读存储介质,其中存储有多条指令,所述指令适于由嵌入式终端设备设备的处理器加载并执行以下处理:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
本发明的第三目的是提供一种嵌入式终端设备。
为了实现上述目的,本发明采用如下一种技术方案:
一种嵌入式终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行以下处理:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
本发明的有益效果:
1、本发明所述的一种嵌入式软件的任务调度方法及装置,在裸机开发方式下,以逻辑任务结构体的形式描述逻辑任务,以事件的形式进行逻辑任务间的通信,逻辑任务的耦合性低,内聚性高,有利于提高软件质量。
2、本发明所述的一种嵌入式软件的任务调度方法及装置,每个逻辑任务都有自己的事件队列和任务处理程序,任务之间通过发送事件的形式进行通信,有效避免了加载操作系统对RAM资源的消耗,避免了任务上下文切换对MCU计算资源的消耗。
3、本发明所述的一种嵌入式软件的任务调度方法及装置,按照具体应用划分若干逻辑任务,这些逻辑任务共享一个系统栈,根据应用划分逻辑任务,可以清晰地反映应用的实现逻辑,结构性好,软件修改和维护方便。
附图说明
构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为本发明的本发明的整体方法流程图;
图2是本发明的任务处理程序流程图。
具体实施方式:
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本实施例使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
需要注意的是,附图中的流程图和框图示出了根据本公开的各种实施例的方法和系统的可能实现的体系架构、功能和操作。应当注意,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分可以包括一个或多个用于实现各个实施例中所规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以按照不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,或者它们有时也可以按照相反的顺序执行,这取决于所涉及的功能。同样应当注意的是,流程图和/或框图中的每个方框、以及流程图和/或框图中的方框的组合,可以使用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以使用专用硬件与计算机指令的组合来实现。
在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合下面结合附图与实施例对本发明作进一步说明。
实施例1:
本实施例1的目的是提供一种嵌入式软件的任务调度方法。
为了实现上述目的,本发明采用如下一种技术方案:
如图1所示,
一种嵌入式软件的任务调度方法,该方法包括:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
在本实施例中,所述逻辑任务根据具体应用进行划分。
在本实施例中,以结构体的形式描述逻辑任务,逻辑任务结构体的成员变量包括任务ID、事件队列、事件产生索引、事件消费索引。其中,任务ID以task_id表示,事件队列以event[EVENT_QUEUE_SIZE]表示,事件产生索引以tick_idx表示,事件消费索引以talk_idx表示。
以8位整型定义任务ID,最大可定义256个逻辑任务。逻辑任务的优先级等于任务ID,ID值越大,优先级越高。
以16位整型定义事件,以0代表空事件,最大可定义65536种事件。
事件队列为16位整型数组,数组成员有两种引用下标,分别为事件产生索引和事件消费索引。
在本实施例中,MCU初始化时,按照优先级从低到高的顺序,将各个逻辑任务结构体的事件队列数组成员初始化为0,事件产生索引和事件消费索引初始化为0,然后进入主循环体。
在主循环体中执行任务调度程序,按照优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序。
当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;填充方法为:
将事件赋值给以该逻辑任务结构体的事件产生索引为引用下标的事件队列数组成员,并更新事件产生索引。
如图2所示,任务处理程序的执行方法为:
步骤一,判断该任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件,如果存在,进入步骤二,如果不存在,进入步骤三。在本实施例中,在该方法中,判断任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件的方法为:比较事件产生索引和事件消费索引,若两者相等,则事件队列中不存在未被处理的事件,若不相等,则存在未被处理的事件。
步骤二,读取以该逻辑任务结构体的事件消费索引为引用下标的事件队列数组成员,根据具体事件执行相关操作,更新事件消费索引,返回步骤一;
步骤三,判断当前逻辑任务优先级是否为最低,若是,退出任务调度程序,返回进入主循环体中执行其它程序,否则,执行下一个优先级更低的逻辑任务的任务处理程序。
在本实施例中,所述事件产生索引的更新方法为:将事件产生索引加一,若事件产生索引的索引值等于事件队列数组的长度,将事件产生索引置零;
所述事件消费索引的更新方法为:将事件消费索引加一,若事件消费索引的索引值等于事件队列数组的长度,将事件消费索引置零。
实施例2:
本实施例2的目的是提供一种计算机可读存储介质。
为了实现上述目的,本发明采用如下一种技术方案:
一种计算机可读存储介质,其中存储有多条指令,所述指令适于由嵌入式终端设备设备的处理器加载并执行以下处理:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
实施例3:
本实施例3的目的是提供一种嵌入式终端设备。
为了实现上述目的,本发明采用如下一种技术方案:
一种嵌入式终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行以下处理:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
这些计算机可执行指令在设备中运行时使得该设备执行根据本公开中的各个实施例所描述的方法或过程。
在本实施例中,计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
本文所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开内容操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开内容的各个方面。
应当注意,尽管在上文的详细描述中提及了设备的若干模块或子模块,但是这种划分仅仅是示例性而非强制性的。实际上,根据本公开的实施例,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
本发明的有益效果:
1、本发明所述的一种嵌入式软件的任务调度方法及装置,在裸机开发方式下,以逻辑任务结构体的形式描述逻辑任务,以事件的形式进行逻辑任务间的通信,逻辑任务的耦合性低,内聚性高,有利于提高软件质量。
2、本发明所述的一种嵌入式软件的任务调度方法及装置,每个逻辑任务都有自己的事件队列和任务处理程序,任务之间通过发送事件的形式进行通信,有效避免了加载操作系统对RAM资源的消耗,避免了任务上下文切换对MCU计算资源的消耗。
3、本发明所述的一种嵌入式软件的任务调度方法及装置,按照具体应用划分若干逻辑任务,这些逻辑任务共享一个系统栈,根据应用划分逻辑任务,可以清晰地反映应用的实现逻辑,结构性好,软件修改和维护方便。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种嵌入式软件的任务调度方法,其特征在于,该方法包括:
按照逻辑任务优先级从低到高的顺序初始化MCU,进入主循环体;
在主循环体中执行任务调度程序,按照逻辑任务优先级从高到低的顺序依次执行每个逻辑任务的任务处理程序,直至当前逻辑任务的优先级为最低时,退出任务调度程序返回进入主循环体;
逻辑任务间通过发送事件进行通信,当逻辑任务的中断处理程序或任务处理程序向其他逻辑任务发送事件时,向该逻辑任务结构体中填充事件;
所述逻辑任务结构体用于表示逻辑任务,包括任务ID和事件队列;所述任务ID用于表示逻辑任务优先级,所述事件队列用于存储填充的事件,执行任务处理程序时根据其对应的逻辑任务结构体的事件队列中具体事件执行相关操作。
2.如权利要求1所述的方法,其特征在于,所述逻辑任务根据具体应用进行划分。
3.如权利要求1所述的方法,其特征在于,所述逻辑任务结构体还包括事件队列的引用下标,引用下标包括事件产生索引和事件消费索引,所述事件产生索引用于索引事件队列中填充的事件,所述事件消费索引用于索引执行的事件。
或,所述任务ID为预先定义的8位整形数据,最大定义256个逻辑任务;逻辑任务优先级等于任务ID,任务ID的数值越大,其对应的逻辑任务的优先级越高。
或,所述事件为预先定义的16位整型数据,0代表空事件,最大可定义65536种事件;所述事件队列为预先定义的16位整型数组。
4.如权利要求3所述的方法,其特征在于,在该方法中,按照逻辑任务优先级从低到高的顺序初始化MCU,将各个逻辑任务结构体的事件队列数组成员初始化为0,事件产生索引和事件消费索引初始化为0后,进入主循环体。
5.如权利要求3所述的方法,其特征在于,在该方法中,向逻辑任务结构体中填充事件的填充方法为:
将事件赋值给以该逻辑任务结构体的事件产生索引为引用下标的事件队列数组成员,并更新事件产生索引。
6.如权利要求5所述的方法,其特征在于,在该方法中,任务处理程序的执行方法为:
判断该任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件,
若存在,读取以该逻辑任务结构体的事件消费索引为引用下标的事件队列数组成员,根据具体事件执行相关操作,更新事件消费索引,返回上一判断步骤;
否则,判断当前逻辑任务优先级是否为最低,若是,退出任务调度程序,返回进入主循环体中执行其它程序,否则,执行下一个优先级更低的逻辑任务的任务处理程序。
7.如权利要求6所述的方法,其特征在于,在该方法中,所述事件产生索引的更新方法为:将事件产生索引加一,若事件产生索引的索引值等于事件队列数组的长度,将事件产生索引置零;
所述事件消费索引的更新方法为:将事件消费索引加一,若事件消费索引的索引值等于事件队列数组的长度,将事件消费索引置零。
8.如权利要求6所述的方法,其特征在于,在该方法中,判断任务处理程序对应的逻辑任务结构体中的事件队列中是否存在未被处理的事件的方法为:
比较事件产生索引和事件消费索引,若两者相等,则事件队列中不存在未被处理的事件,若不相等,则存在未被处理的事件。
9.一种计算机可读存储介质,其中存储有多条指令,其特征在于,所述指令适于由嵌入式终端设备设备的处理器加载并执行根据权利要求1-8中任一项所述的方法。
10.一种嵌入式终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,其特征在于,所述指令用于执行根据权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810128162.1A CN108536527B (zh) | 2018-02-08 | 2018-02-08 | 一种嵌入式软件的任务调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810128162.1A CN108536527B (zh) | 2018-02-08 | 2018-02-08 | 一种嵌入式软件的任务调度方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536527A true CN108536527A (zh) | 2018-09-14 |
CN108536527B CN108536527B (zh) | 2020-10-30 |
Family
ID=63485921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810128162.1A Active CN108536527B (zh) | 2018-02-08 | 2018-02-08 | 一种嵌入式软件的任务调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536527B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109960589A (zh) * | 2019-03-25 | 2019-07-02 | 上海富士施乐有限公司 | 嵌入式系统的系统软件层的实现方法、装置及可读介质 |
CN110990139A (zh) * | 2019-12-06 | 2020-04-10 | 安徽芯智科技有限公司 | 一种基于rtos的smp调度方法及系统 |
CN113051082A (zh) * | 2021-03-02 | 2021-06-29 | 长沙景嘉微电子股份有限公司 | 软件硬件数据同步方法、装置、电子设备和存储介质 |
CN114035930A (zh) * | 2021-11-29 | 2022-02-11 | 重庆大学 | 用于任务调度的方法及装置、电子设备、可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11353193A (ja) * | 1998-06-11 | 1999-12-24 | Kdk Corp | マルチプログラミング実行制御方法 |
CN101042660A (zh) * | 2006-03-23 | 2007-09-26 | 松下电器产业株式会社 | 多任务系统中的任务执行环境切换方法 |
CN101950260A (zh) * | 2010-09-10 | 2011-01-19 | 中兴通讯股份有限公司 | 一种处理器程序调度方法及装置 |
CN107391244A (zh) * | 2017-07-11 | 2017-11-24 | 重庆邮电大学 | 一种基于混合调度模型的物联网操作系统调度方法 |
CN107577528A (zh) * | 2017-09-01 | 2018-01-12 | 长沙小卡机器人科技有限公司 | 多任务序列并行运行的方法 |
-
2018
- 2018-02-08 CN CN201810128162.1A patent/CN108536527B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11353193A (ja) * | 1998-06-11 | 1999-12-24 | Kdk Corp | マルチプログラミング実行制御方法 |
CN101042660A (zh) * | 2006-03-23 | 2007-09-26 | 松下电器产业株式会社 | 多任务系统中的任务执行环境切换方法 |
CN101950260A (zh) * | 2010-09-10 | 2011-01-19 | 中兴通讯股份有限公司 | 一种处理器程序调度方法及装置 |
CN107391244A (zh) * | 2017-07-11 | 2017-11-24 | 重庆邮电大学 | 一种基于混合调度模型的物联网操作系统调度方法 |
CN107577528A (zh) * | 2017-09-01 | 2018-01-12 | 长沙小卡机器人科技有限公司 | 多任务序列并行运行的方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109960589A (zh) * | 2019-03-25 | 2019-07-02 | 上海富士施乐有限公司 | 嵌入式系统的系统软件层的实现方法、装置及可读介质 |
CN110990139A (zh) * | 2019-12-06 | 2020-04-10 | 安徽芯智科技有限公司 | 一种基于rtos的smp调度方法及系统 |
CN110990139B (zh) * | 2019-12-06 | 2020-11-24 | 安徽芯智科技有限公司 | 一种基于rtos的smp调度方法及系统 |
CN113051082A (zh) * | 2021-03-02 | 2021-06-29 | 长沙景嘉微电子股份有限公司 | 软件硬件数据同步方法、装置、电子设备和存储介质 |
CN114035930A (zh) * | 2021-11-29 | 2022-02-11 | 重庆大学 | 用于任务调度的方法及装置、电子设备、可读存储介质 |
CN114035930B (zh) * | 2021-11-29 | 2024-05-10 | 重庆大学 | 用于任务调度的方法及装置、电子设备、可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108536527B (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536527A (zh) | 一种嵌入式软件的任务调度方法及装置 | |
CN105518620B (zh) | 一种网卡配置方法及资源管理中心 | |
CN102541630B (zh) | 计算机处理器中线程间数据通信的方法和系统 | |
CN110162388A (zh) | 一种任务调度方法、系统及终端设备 | |
CN105991731A (zh) | 一种获取信息的方法、智能终端和服务端 | |
CN109783472A (zh) | 表数据的迁移方法、装置、计算机设备和存储介质 | |
CN103136047B (zh) | 一种多线程管理方法及架构 | |
CN108540568A (zh) | 计算能力共享方法及智能设备 | |
CN109992407A (zh) | 一种yarn集群gpu资源调度方法、装置和介质 | |
CN102662740A (zh) | 非对称多核系统及其实现方法 | |
CN109582452A (zh) | 一种容器调度方法、调度装置及电子设备 | |
CN103927216A (zh) | 用于管理虚拟装置的方法和系统 | |
CN111552550A (zh) | 一种基于图形处理器gpu资源的任务调度方法、设备及介质 | |
CN107944000A (zh) | 航班运价更新方法、装置、电子设备、存储介质 | |
CN115033352A (zh) | 多核处理器任务调度方法、装置及设备、存储介质 | |
CN109800261A (zh) | 双数据库连接池的动态控制方法、装置及相关设备 | |
CN105653347B (zh) | 一种服务器、资源管理方法及虚拟机管理器 | |
CN110532060A (zh) | 一种混合网络环境数据采集方法及系统 | |
CN110471747A (zh) | 一种dma多通道的调度使用方法、装置及终端设备 | |
CN110389976A (zh) | 一种多接口数据的调度方法和装置 | |
CN111489279B (zh) | Gpu加速优化方法、装置及计算机存储介质 | |
CN109639599B (zh) | 网络资源调度方法及系统、存储介质及调度设备 | |
CN108964904A (zh) | 群密钥安全管理方法、装置、电子设备及存储介质 | |
CN113822485A (zh) | 一种配电网调度任务优化方法及系统 | |
CN108319488A (zh) | 一种基于qml图形化的统一消息处理方法及装置 |
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 |