本发明涉及嵌入式os领域,具体地涉及一种嵌入式os任务调度方法、装置、终端设备及存储介质。
背景技术:
在嵌入式os中任务调度算法非常频繁,在频繁使用的调度算法函数中,即使少一条指令对cpu来说也是有益的,能提高整个系统的效率。现有嵌入式os任务调度算法大都采用遍历任务控制表来实现,即使是较为高效的ucos也是需要计算任务优先级的横坐标与纵坐标值,系统效率相对较低。
技术实现要素:
本发明旨在提供一种嵌入式os任务调度方法、装置、终端设备及存储介质,以解决上述问题。为此,本发明采用的具体技术方案如下:
根据本发明的一方面,提供了一种嵌入式os任务调度方法,其中,该方法包括以下步骤:
为每个任务分配一个不同的任务id号,其中,任务id号越小,优先级越高;
创建任务数组,并将任务id号映射到任务数组字节中的相应位,该位有效表示该任务是活动的;
创建匹配表;
通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行。
进一步地,所述任务数组为8位数组,相应地所述匹配表定义如下:
staticconstint8us_lsbmap[256]={
8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}。
根据本发明的另一方面,提供了一种嵌入式os任务调度装置,其中,该装置包括:
任务id分配模块,用于为每个任务分配一个不同的任务id号,其中,任务id号越小,优先级越高;
任务数组创建模块,用于创建任务数组,并将任务id号映射到任务数组字节中的相应位,该位有效表示该任务是活动的;
匹配表创建模块,用于创建匹配表;
任务调度模块,用于通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行。
进一步地,所述任务数组为8位数组,相应地所述匹配表定义如下:
staticconstint8us_lsbmap[256]={
8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}。
根据本发明的另一方面,还提供了一种具有嵌入式os的终端设备,其包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述的方法的步骤。
根据本发明的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如上所述的方法的步骤。
本发明采用上述技术方案,具有的有益效果是:本发明可以根据任务个数的大小来调节任务数组的个数,无需循环查找最高优先级任务的冗余操作,也不需要像ucos一样需要计算横坐标和纵坐标,大大减少了指令条数,提高嵌入式os的效率。
附图说明
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
图1是根据本发明实施例的一种嵌入式os任务调度方法的流程图;
图2是根据本发明实施例的一种嵌入式os任务调度装置的框图。
具体实施方式
现结合附图和具体实施方式对本发明进一步说明。
如图1所示,根据本发明的一方面,提供了一种嵌入式os任务调度方法,其中,该方法包括以下步骤:
s1.为每个任务分配一个不同的任务id号。其中,任务id号越小,优先级越高。任务id号为0时,表示该任务优选级最高。
s2.创建任务数组,并将任务id号映射到任务数组字节中的相应位(bit)。该位有效(为1)表示该任务是活动的。在一具体实施例中,任务数组为8位(8-bit)数组,即任务数组一个字节存储8个任务。例如,任务a的任务id号是0,则对应第一个任务数组array[0]的第一位,表示为array[0].0;任务b的任务id号是10,则对应到第二个array[1]的第二位,表示为array[1].2。当array[0].0为1时,表示任务a是活动的;当array[0].0为0时,表示任务a是不活动的。
s3.创建匹配表。在任务数组为8位数组的情况下,匹配表定义如下:
taticconstint8us_lsbmap[256]={
8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}。
其中,该匹配表中的匹配表序号为0-255,对应于8bit二进制数00000000-11111111,匹配表中的数字表示当前执行的任务id号。
s4.通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行。例如,如果array[0]=0000011,即array[0]等于3,通过查匹配表(3相当于匹配表中的第4个),得到任务的s_lsbmap[array[0]]等于0,从而判断当前就执行任务id为0的任务;同理,如果array[0]=0,array[1]=2,通过查表就可快速得到当前执行任务id为8 1=9的任务。
应该理解,上述步骤的顺序仅是示例性的,本发明的方法并不对上述步骤的顺序进行限定。
该方法可以根据任务个数的大小来调节任务数组的大小,任务id个数可以不受限制,少掉了循环查找最高优先级任务的冗余操作,也不需要像ucos一样需要计算横坐标和纵坐标,大大减少了指令条数,提高嵌入式os的效率。
如图2所示,根据本发明的另一方面,提供了一种嵌入式os任务调度装置,其中,该装置包括:
任务id分配模块100,用于为每个任务分配一个不同的任务id号。其中,任务id号越小,优先级越高;任务id号为0时,表示该任务优选级最高;
任务数组创建模块110,用于创建任务数组,并将任务id号映射到任务数组的相应位,该位有效表示该任务是活动的,具体过程已在上文进行了说明,这里不再赘述;
匹配表创建模块120,用于创建匹配表,该匹配表如上所述,这里不再赘述;
任务调度模块130,用于通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行,具体过程已在上文进行了说明,这里不再赘述。
此外,本发明还提供了一种终端设备,可包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现上述方法实施例中的步骤,例如图1所示的步骤s1-s2等方法步骤,或者所述处理器执行所述计算机程序时实现上述装置实施例中各模块/单元的功能,例如任务id分配模块100、任务数组创建模块110、匹配表创建模块120和任务调度模块130等。
示例性地,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述终端设备中的执行过程。。
终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。终端设备可包括但不仅限于,处理器、存储器。例如其还可以包括输入输出设备、网络接入设备、总线等。
处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述的方法的步骤,例如图1所示的步骤s1-s2等方法步骤。
计算机程序的各个模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
1.一种嵌入式os任务调度方法,其特征在于,包括以下步骤:
为每个任务分配一个不同的任务id号,其中,任务id号越小,优先级越高;
创建任务数组,并将任务id号映射到任务数组字节中的相应位,该位有效表示该任务是活动的;
创建匹配表;
通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行。
2.如权利要求1所述的嵌入式os任务调度方法,其特征在于,所述任务数组为8位数组,相应地所述匹配表定义如下:
staticconstint8us_lsbmap[256]={
8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}。
3.一种嵌入式os任务调度装置,其特征在于,包括:
任务id分配模块,用于为每个任务分配一个不同的任务id号,其中,任务id号越小,优先级越高;
任务数组创建模块,用于创建任务数组,并将任务id号映射到任务数组字节中的相应位,该位有效表示该任务是活动的;
匹配表创建模块,用于创建匹配表;
任务调度模块,用于通过查所述匹配表查找任务数组字节中的最低有效位来判断当前哪个任务执行。
4.如权利要求3所述的嵌入式os任务调度装置,其特征在于,所述任务数组为8位数组,相应地所述匹配表定义如下:
staticconstint8us_lsbmap[256]={
8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}。
5.一种具有嵌入式os的终端设备,其包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1~2中任一项所述的方法的步骤。
6.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1~2中任一项所述的方法的步骤。
技术总结