基于多核CPU的FreeRTOS运行任务方法及装置与流程

文档序号:28427732发布日期:2022-01-12 00:35阅读:2222来源:国知局
基于多核CPU的FreeRTOS运行任务方法及装置与流程
基于多核cpu的freertos运行任务方法及装置
技术领域
1.本发明涉及嵌入式实时操作系统技术领域,尤其涉及一种基于多核cpu的freertos运行任务方法及装置。


背景技术:

2.开源的嵌入式实时操作系统(free real time operating system,freertos)作为一个轻量级的操作系统,它具有的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,采用freertos可以更合理、更有效地利用cpu的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。
3.目前,freertos已可以支持多种架构的cpu,包括riscv架构。riscv,即risc-v(英文发音为"risk-five")是一个全新的指令集架构,该架构最初由美国加州大学伯克利分校的eecs部门的计算机科学部门的krste asanovic教授、andrew waterman和yunsup lee等开发人员于2010年发明。其中"risc"表示精简指令集,而其中"v"表示伯克利分校从risci开始设计的第五代指令集。
4.然而,现有的freertos实时操作系统,只能运行在单核cpu上,而不支持多核cpu,如对于创建的多个任务,它不能支持真正的同时运行,导致对于多核cpu无法充分发挥cpu的性能。


技术实现要素:

5.有鉴于此,本发明提供一种基于多核cpu的freertos运行任务方法及装置,主要目的在于当freertos实时操作系统运行在多核cpu时能够支持多任务同时运行,确保了多核cpu充分发挥cpu的性能。
6.为了达到上述目的,本发明主要提供如下技术方案:
7.本技术第一方面提供了一种基于多核cpu的freertos运行任务方法,该方法包括:
8.初始化配置多核cpu,所述多核包括一个目标核和至少一个其他核;
9.若所述目标核抢占了自旋锁去访问全局任务就绪表,则所述目标核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务,所述全局任务就绪表内存储了未与核绑定的任务,每个核均有自身对应的核任务就绪表,用于存储与核绑定的任务;
10.所述目标核运行所述第一任务并释放所述自旋锁;
11.在所述目标核运行所述第一任务的同时,若所述其他核抢占了所述自旋锁去访问所述全局任务就绪表,则所述其他核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务,并运行所述第二任务。
12.在本技术第一方面的一些变更实施方式中,
13.所述目标核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务,包括:所述目标核
14.通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级最高的任务为第一任务;
15.所述其他核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务,包括:所述其他核
16.通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级最高的任务为第二任务。
17.在本技术第一方面的一些变更实施方式中,所述通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,包括:
18.从所述全局任务就绪表中获取表内最高优先级任务对应的第一优先级标识;
19.所述目标核或所述其他核从自身的核任务就绪表中获取表内最高优先级任务对应的第二优先级标识;
20.将所述第一优先级标识和所述第二优先级标识进行比较,获取较高的优先级标识,其中,所述较高的优先级标识对应的任务为任务运行优先级最高的任务。
21.在本技术第一方面的一些变更实施方式中,在所述目标核运行所述第一任务时,所述方法还包括:
22.若所述目标核等待所述第一任务对应触发消息的时长达到预设阈值,则将所述第一任务添加到所述目标核的阻塞列表内;
23.当所述其他核监测到所述触发消息时,所述其他核向所述目标核释放信号量,所述信号量用于通知所述目标核释放阻塞的信号;
24.若所述第一任务与所述目标核不存在绑定关系,则所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并返回到所述全局任务就绪表内。
25.在本技术第一方面的一些变更实施方式中,若所述第一任务与所述目标核存在绑定关系,所述方法还包括:
26.所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并添加到所述目标核的核任务就绪表内;
27.所述其他核将所述触发消息传递给所述目标核并触发核间中断指令,所述核间中断指令用于通知所述目标核做任务切换;
28.根据所述核间中断指令,所述目标核从所述核任务就绪表内获取所述第一任务;
29.根据所述触发消息,所述目标核重新运行所述第一任务。
30.在本技术第一方面的一些变更实施方式中,所述方法还包括:
31.当所述目标核接收到定时中断指令时,所述目标核终止运行当前任务;
32.根据所述定时中断指令,所述目标核执行任务切换操作。
33.在本技术第一方面的一些变更实施方式中,所述根据所述定时中断指令,所述目标核执行任务切换操作,包括:
34.所述目标核通过抢占所述自旋锁去获取访问所述全局任务就绪表的权限;
35.所述目标核通过将所述全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级当前最高的第三任务;
36.所述目标核运行所述第三任务并释放自旋锁。
37.本技术第二方面提供了一种基于多核cpu的freertos运行任务装置,该装置包括:
38.配置单元,用于初始化配置多核cpu,所述多核包括一个目标核和至少一个其他核;
39.确定单元,用于当所述目标核抢占了自旋锁去访问全局任务就绪表时,使所述目标核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务,所述全局任务就绪表内存储了未与核绑定的任务,每个核均有自身对应的核任务就绪表,用于存储与核绑定的任务;
40.运行单元,用于使所述目标核运行所述第一任务并释放所述自旋锁;
41.所述确定单元,还用于在所述目标核运行所述第一任务的同时,当所述其他核抢占了所述自旋锁去访问所述全局任务就绪表时,使所述其他核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务;
42.所述运行单元,还用于使所述其他核运行所述第二任务。
43.在本技术第二方面的一些变更实施方式中,所述确定单元包括:比较模块和确定模块,
44.所述比较模块,用于使所述目标核通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较;
45.所述确定模块,用于确定任务运行优先级最高的任务为第一任务;
46.所述比较模块,还用于使所述其他核通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较;
47.所述确定模块,还用于确定任务运行优先级最高的任务为第二任务。
48.在本技术第二方面的一些变更实施方式中,所述比较模块包括:
49.获取子模块,用于从所述全局任务就绪表中获取表内最高优先级任务对应的第一优先级标识;
50.所述获取子模块,还用于使所述目标核或所述其他核从自身的核任务就绪表中获取表内最高优先级任务对应的第二优先级标识;
51.比较子模块,用于将所述第一优先级标识和所述第二优先级标识进行比较;
52.所述获取子模块,还用于获取较高的优先级标识,其中,所述较高的优先级标识对应的任务为任务运行优先级最高的任务。
53.在本技术第二方面的一些变更实施方式中,所述装置包括:
54.添加单元,用于在所述目标核运行所述第一任务时,当所述目标核等待所述第一任务对应触发消息的时长达到预设阈值时,将所述第一任务添加到所述目标核的阻塞列表内;
55.释放单元,用于当所述其他核监测到所述触发消息时,使所述其他核向所述目标核释放信号量,所述信号量用于通知所述目标核释放阻塞的信号;
56.返还单元,用于当所述第一任务与所述目标核不存在绑定关系时,在所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并返回到所述全局任务就绪表内。
57.在本技术第二方面的一些变更实施方式中,所述装置还包括:
58.所述添加单元,还用于当所述第一任务与所述目标核存在绑定关系时,在所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并添加到所述目标
核的核任务就绪表内;
59.传递单元,用于使所述其他核将所述触发消息传递给所述目标核并触发核间中断指令,所述核间中断指令用于通知所述目标核做任务切换;
60.获取单元,用于根据所述核间中断指令,使所述目标核从所述核任务就绪表内获取所述第一任务;
61.所述运行单元,还用于根据所述触发消息,使所述目标核重新运行所述第一任务。
62.在本技术第二方面的一些变更实施方式中,所述装置还包括:
63.终止单元,用于当所述目标核接收到定时中断指令时,使所述目标核终止运行当前任务;
64.切换单元,用于根据所述定时中断指令,使所述目标核执行任务切换操作。
65.在本技术第二方面的一些变更实施方式中,所述切换单元包括:
66.获取模块,用于使所述目标核通过抢占所述自旋锁去获取访问所述全局任务就绪表的权限;
67.确定模块,用于使所述目标核通过将所述全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级当前最高的第三任务;
68.运行模块,用于使所述目标核运行所述第三任务并释放自旋锁。
69.本技术第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的基于多核cpu的freertos运行任务方法。
70.本技术第四方面提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于多核cpu的freertos运行任务方法。
71.借由上述技术方案,本发明提供的技术方案至少具有下列优点:
72.本发明提供一种基于多核cpu的freertos运行任务方法及装置,首先是需要初始化配置多核cpu,多个核是通过抢占自旋锁来获取访问全局任务就绪表的权限的,那么对于抢占到自旋锁的核可以称为目标核,而对于等待自旋锁被释放的核称为其他核。由此每个核都有机会抢占到自旋锁而获取访问全局任务就绪表的权限,继而每个核都能够根据全局任务就绪表和自身核任务就绪表内任务的优先级确定选出一个任务,那么每个核都能够各自独立地运行被选出的任务。只是当自旋锁被抢占时只有一个核去执行这样的操作而已,但是由于当目标核获取到被选出的任务之后就会释放自旋锁,即运行了这个被选出的任务并会释放自旋锁,所以不会占用自旋锁时间过久且不会耽搁其他核获取任务的操作,从而实现了多个核能够同时各自独立运行相应的任务。相较于现有技术,解决了现有的freertos实时操作系统不支持多核cpu的问题,对于freertos实时操作系统运行在多核cpu上,本发明真正地实现了支持多任务同时运行,确保了多核cpu充分发挥cpu的性能。
73.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
74.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
75.图1为本发明实施例提供的一种基于多核cpu的freertos运行任务方法流程图;
76.图2为本发明实施例提供的另一种基于多核cpu的freertos运行任务方法流程图;
77.图3为本发明实施例提供的一种基于多核cpu的freertos运行任务装置的组成框图;
78.图4为本发明实施例提供的另一种基于多核cpu的freertos运行任务装置的组成框图。
具体实施方式
79.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
80.本发明实施例提供了一种基于多核cpu的freertos运行任务方法,如图1所示,该方法是当freertos实时操作系统运行在多核cpu时能够支持多任务同时运行,对此本发明实施例提供以下具体步骤:
81.101、初始化配置多核cpu,多核包括一个目标核和至少一个其他核。
82.其中,在本发明实施例中cpu的多个核是通过抢占自旋锁来获取访问全局任务就绪表的权限的,那么对于抢占到自旋锁的核可以称为目标核,而对于等待自旋锁被释放的核则称为其他核。
83.在本发明实施例中可以利用预先编写的启动文件去初始化cpu,该启动文件可以预先烧写在芯片内部,当芯片运行时将直接运行这个文件,启动文件主要是针对芯片的初始化,对于本发明实施例,主要是针对多核cpu的核的初始化,也就是利用启动文件对多核cpu做一些配置。
84.对于利用启动文件初始化多核cpu的过程,主要包括:初始化每个核分配自己的栈空间,具体的,启动文件内至少会存储一个数据表,该数据表内会记录每个核分配多大的栈空间,以便根据该数据表就能够完成核内资源分配的初始化操作;另外,还需要设置一些时钟,如cpu的工作频率,以及各个外设(如显卡)工作频率,这些相当于是外设时钟的初始化。
85.在本发明实施例中,对于多核cpu,可以将多个核中任意一个核,作为第一核,而相应的其他核则作为第二核,该词语“第一”和“第二”仅是方便用于区分一个核与其他核。那么可以使用第一核执行上述的初始化操作,而第二核处于等待状态。等待第一核初始化操作完成,第一核会向第二核发送消息,通知第二核:第一核完成了初始化操作。那么第二核就可以直接复制第一核上的相关配置信息,来完成自身核上的初始化配置。因此,对于本发明实施例,只需要利用启动文件执行对任意一个核的初始化操作即可,大大节省了初始化配置多核cpu的的时间和处理成本。
86.需要说明的是,在本发明实施例中,只是在对多核cpu进行初始化阶段引入“第一
核”和“第二核”的概念,而在初始化阶段完成之后,多核cpu内每个核工作原理都是相同的。
87.102、若目标核抢占了自旋锁去访问全局任务就绪表,则目标核根据全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务。
88.其中,全局任务就绪表中至少存储两个待运行的任务,每个任务是根据实际任务需求而设计的,比如,一个任务为“键盘按键a被按下,执行

开灯/关灯
’”
。全局任务就绪表中存储的任务都是未与某个核预先绑定的,且可以对表内的每个任务设置不同优先级,以便表内任务可以按照优先级高低而被核获取。另外每个核均有自身对应的核任务就绪表,用于存储与核存在绑定的任务,该表内每个任务与上述全局任务就绪表内任务的设计方法相同,核任务就绪表内也可以对每个任务添加优先级,以便表内任务可以按照优先级高低而被核获取。
89.在本发明实施例中,全局任务就绪表可以被存储在内存上,例如,对于4g或8g的内存条,可以划分出1g空间用于存储全局任务就绪表,继而cpu每个核都可以访问这个空间,从全局任务就绪表中获取待运行的任务。但是需要说明的是,同一时间只允许一个核访问全局任务就绪表以获取任务,这就使用到了自旋锁,自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分。
90.具体的,在本发明实施例中,对于cpu的多个核,只有获取到自旋锁才能够使用任务调度器从全局任务就绪表中获取任务,自旋锁只有一个,并且只有等待一个核释放了自旋锁,其他核才能够获取到自旋锁。从而利用自旋锁,能够避免因多个核同时运行会出现同时做任务切换的现象,也就避免内核数据被破坏导致系统运行出错的问题,达到保护内核数据的目的。
91.上述提及的任务调度器为freertos实时操作系统下运行的调度器,对于本发明实施例,任务调度器只有一个,但是会有多个接口。在步骤101对多核cpu初始化完成之后,哪个cpu核先启动,就可以去创建这个任务调度器,每个核都可以通过上述接口与任务调度器连接,进入该任务调度器,去使用该任务调度器获取任务、执行任务切换或控制任务的运行状态等等。
92.在本发明实施例中,如果一个目标核抢占了自旋锁,那么它就获取到了访问全局任务就绪表的权限,并且它又可以访问自身核任务就绪表,那么目标核根据全局任务就绪表和自身的核任务就绪表内任务的优先级,就可以确定选出一个任务,可以标识为“第一任务”,词语“第一任务”以及下文的“第二任务”,方便于用于区分不同核获取到的不同任务。
93.103、目标核运行第一任务并释放自旋锁。
94.在本发明实施例中,cpu的多个核是通过抢占自旋锁来获取访问全局任务就绪表的权限的,那么对于抢占到自旋锁的核可以称为目标核,而对于等待自旋锁被释放的核则称为其他核。在目标核获取到第一任务之后,目标核运行第一任务,同时也会主动释放自旋锁,让出获取自旋锁的机会,从而目标核运行任务,不会影响其他核获取自旋锁的时间,也不会影响到其他核去获取其他任务。
95.104、在目标核运行第一任务的同时,若其他核抢占了自旋锁去访问全局任务就绪表,则其他核根据全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务,并运行第二任务。
96.在本发明实施例中,在目标核运行第一任务的同时,不会占用自旋锁,而是释放自
旋锁,从而如果其他核抢占了自旋锁,那么也会获取到访问全局任务就绪表的权限。在获取到这个访问权限后,其他核也会根据全局任务就绪表和自身的核任务就绪表内任务的优先级选出一个任务,该操作与如上目标核比较两个任务就绪表而选出任务操作相同,为了加以区别,所以将其他核选出任务标识为第二任务。在获取到第二任务之后,其他核会运行第二任务并释放自旋锁,让出获取自旋锁的机会。
97.对于本发明实施例,多核cpu内的每个核都有抢占自旋锁并访问全局任务就绪表的机会,继而每个核都可以通过比较全局任务就绪表和自身核任务就绪表去选出一个待运行任务,从而实现了多个任务是可以同时被部署在多个核上运行的,充分发挥cpu的性能。
98.以上,本发明实施例提供一种基于多核cpu的freertos运行任务方法,首先是需要初始化配置多核cpu,多个核是通过抢占自旋锁来获取访问全局任务就绪表的权限的,那么对于抢占到自旋锁的核可以称为目标核,而对于等待自旋锁被释放的核称为其他核。由此每个核都有机会抢占到自旋锁而获取访问全局任务就绪表的权限,继而每个核都能够根据全局任务就绪表和自身核任务就绪表内任务的优先级确定选出一个任务,那么每个核都能够各自独立地运行被选出的任务。只是当自旋锁被抢占时只有一个核去执行这样的操作而已,但是由于当目标核获取到被选出的任务之后就会释放自旋锁,即运行了这个被选出的任务并会释放自旋锁,所以不会占用自旋锁时间过久且不会耽搁其他核获取任务的操作,从而实现了多个核能够同时各自独立运行相应的任务。相较于现有技术,解决了现有的freertos实时操作系统不支持多核cpu的问题,对于freertos实时操作系统运行在多核cpu上,本发明实施例真正地实现了支持多任务同时运行,确保了多核cpu充分发挥cpu的性能。
99.为了对上述实施例做出更加详细的说明,本发明实施例还提供了另一种基于多核cpu的freertos运行任务方法,如图2所示,对此本发明实施例提供以下具体步骤:
100.201、初始化配置多核cpu,多核包括一个目标核和至少一个其他核。
101.在本发明实施例中,对本步骤陈述,参见步骤101,此处不再赘述。
102.202、若目标核抢占了自旋锁去访问全局任务就绪表,则目标核根据全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务。
103.其中,全局任务就绪表内存储了未与核绑定的任务,每个核均有自身对应的核任务就绪表,用于存储与核绑定的任务。
104.在本发明实施例中,在freertos下,不论是核运行一个初始任务或因任务切换去获取新任务,每个核都是通过比较全局任务就绪表和自身核任务就绪表而选取当前最高优先级任务,具体实施步骤可以包括如下:
105.首先,在目标核抢占了自旋锁并获取到访问全局任务就绪表的权限之后,从全局任务就绪表中获取表内最高优先级任务对应的第一优先级标识。
106.其次,目标核从自身的核任务就绪表中获取表内最高优先级任务对应的第二优先级标识。
107.最后,将第一优先级标识和第二优先级标识进行比较,获取较高的优先级标识,该较高的优先级标识对应的任务为任务运行优先级最高的任务。
108.对于本发明实施例,是采用不同表内任务优先级标识进行比较,从而判断出两个表内当前最高优先级标识的任务是哪一个,而不是直接从两个表内抽取任务进行比较,从而避免多次重复抽取或放回任务所浪费处理资源,提高识别到当前最高优先级标识的任务
的效率。
109.203、目标核运行第一任务并释放自旋锁。
110.在本发明实施例中,对于本步骤还需要补充说明的是,基于任务被设计为:当目标核获取到任务之后,就会在目标核上运行任务,但是任务执行完成是需要“消息”触发的。例如,任务“键盘按键a被按下,执行

开灯/关灯
’”

111.那么,在目标核获取到这个任务之后,会运行这个任务,但是需要等待触发消息(即检测“键盘按键a被按下”),如果接收到这条触发消息,才能够执行这个任务(即执行“开灯/关灯”)。那么,如果在目标核上运行的任务一直未接收到对应的触发消息,且等待时长达到预设阈值,则就会将该任务添加到目标核内的阻塞列表中。
112.需要说明的是,在本发明实施例中,因cpu内多个核都有抢占自旋锁以获取访问全局任务就绪表的访问权限,继而每个核都能够通过比对全局任务就绪表和自身核任务就绪表而获取到当前最高优先级任务,继而每个核都能够获取到任务并运行任务,也就是此时虽然目标核上一个任务被进入到核内阻塞列表内,但是该目标核仍然可以继续获取任务,以及其他核也可以获取任务并运行任务,无论目标核或其他核仍然都是在工作中的。
113.因此,如果当其他核监测到上述提及的触发消息(即目标核上任务对应所需的触发消息)时,其他核向目标核释放信号量,信号量用于通知目标核释放阻塞的信号。当目标核接收到该信号量时会将之前放入核内阻塞列表的任务释放出来,但是后续操作存在如下两种情况:
114.一种情况是,若被释放的任务与目标核不存在绑定关系,则目标核在获取到信号量之后,将任务从阻塞列表中释放并返回到全局任务就绪表内。那么这个任务就不能被立即运行了,只能等待某个核获取到访问全局任务就绪表访问权限,并比对全局任务就绪表和自身核任务就绪表而选择当前最高优先级任务为这个任务时,该任务才能被该某个核从全局任务就绪表内提取,并放入该某个核内,而且在该某个核运行这个任务时还需要等待对应的触发消息了。
115.另一种情况是,若被释放的任务与目标核是存在绑定关系的,目标核在获取到信号量之后,将任务从阻塞列表中释放并添加到目标核的核任务就绪表内。其他核将触发消息传递给目标核并触发核间中断指令,核间中断指令用于通知目标核做任务切换,也就是告知目标核中止当前运行的其他任务,而是根据核间中断指令,目标核从核任务就绪表内获取任务(即之前被释放的任务),根据触发消息,目标核重新运行该任务。
116.204、在目标核运行第一任务的同时,若其他核抢占了自旋锁去访问全局任务就绪表,则其他核根据全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务,并运行第二任务。
117.在本发明实施例中,在freertos下,不论是核运行一个初始任务或因任务切换去获取新任务,每个核都是通过比较全局任务就绪表和自身核任务就绪表而选取当前最高优先级任务。据此,其他核也是通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级最高的任务为第二任务,具体实施步骤如下:
118.首先,从全局任务就绪表中获取表内最高优先级任务对应的第一优先级标识;其次,目标核或其他核从自身的核任务就绪表中获取表内最高优先级任务对应的第二优先级标识;最后,将第一优先级标识和第二优先级标识进行比较,获取较高的优先级标识,该较
高的优先级标识对应的任务为任务运行优先级最高的任务。
119.需要说明的是,其他核获取第二任务的具体实施步骤,实际与目标核获取第一任务的具体实施步骤相同,因此对应步骤细节陈述,此处不再赘述了。
120.205、当目标核接收到定时中断指令时,目标核终止运行当前任务。
121.在本发明实施例中,中断指令类型分为两种:一种是软件中断,另一种是定时中断。软件中断类型的中断指令是指核间中断指令,如上述提及的目标核接收核间中断指令而中止当前运行的其他任务,而是从核任务就绪表内获取之前释放的被阻塞任务,并运行该任务。但是定时中断类型对应的定时中断指令,freertos设置的周期性中断指令,定时中断类型是对应于利用定时器实现的中断控制,定时器中断是由系统嘀嗒产生的,用于定期查看是否需要任务切换和维护系统延时功能。
122.206、根据定时中断指令,目标核执行任务切换操作。
123.在本发明实施例中,本步骤可以进一步细化包括:目标核通过抢占自旋锁去获取访问全局任务就绪表的权限;目标核通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级当前最高的第三任务;目标核运行第三任务并释放自旋锁。该“第三任务”方便用于标识区别于如上的“第一任务”和“第二任务”。
124.下面,结合具体示例场景,解释步骤205-206,可以包括如下:
125.示例性的,目标核正在运行一个任务a,如果没有其他事件打断的话,这个任务a会一直循环运行下去,定时中断的目的就是将任务a打断而切换成其他任务。具体的,可以在芯片上设置计时设备(如定时器)为每1毫秒触发一次,对于正在运行任务a的目标核,当定时器触发定时中断时,则会中断目标核运行的任务a,不管任务a是否运行完成,都将会从全局任务就绪表或目标核内核任务就绪表中获取待运行的另一个任务,具体的,获取待运行的另一个任务所依据的标准仍然是:每个核是通过比较全局任务就绪表内任务和自身核任务就绪表内任务而获取当前最高优先级任务。
126.进一步的举例,任务a为“做一个求和运算,连续自然数由1累加到10000”,当目标核在运行任务a的过程中,如果已经累加到了1000,此时目标核接收到一个定时中断指令,那么不管该任务a是否执行完成,目标核都将停止运行任务a,而执行任务切换操作去获取另一个任务,具体的,获取哪个任务,则需要重新获取自旋锁以获取访问全局任务就绪表的权限,比较全局任务就绪表内任务和自身核任务就绪表内任务而获取任务运行当前最高优先级任务,假设为任务b,则目标核获取任务b并运行任务b。
127.进一步的,作为对上述图1、图2所示方法的实现,本发明实施例提供了一种基于多核cpu的freertos运行任务装置。该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。该装置应用于使freertos实时操作系统运行在多核cpu上,具体如图3所示,该装置包括:
128.配置单元301,用于初始化配置多核cpu,所述多核包括一个目标核和至少一个其他核;
129.确定单元302,用于当所述目标核抢占了自旋锁去访问全局任务就绪表时,使所述目标核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第一任务,所述全局任务就绪表内存储了未与核绑定的任务,每个核均有自身对应的核任务就绪表,
用于存储与核绑定的任务;
130.运行单元303,用于使所述目标核运行所述第一任务并释放所述自旋锁;
131.所述确定单元302,还用于在所述目标核运行所述第一任务的同时,当所述其他核抢占了所述自旋锁去访问所述全局任务就绪表时,使所述其他核根据所述全局任务就绪表和自身的核任务就绪表内任务的优先级确定出第二任务;
132.所述运行单元303,还用于使所述其他核运行所述第二任务。
133.进一步的,如图4所示,所述确定单元302包括:比较模块3021和确定模块3022,
134.所述比较模块3021,用于使所述目标核通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较;
135.所述确定模块3022,用于确定任务运行优先级最高的任务为第一任务;
136.所述比较模块3021,还用于使所述其他核通过将全局任务就绪表内任务与自身的核任务就绪表内任务进行比较;
137.所述确定模块3022,还用于确定任务运行优先级最高的任务为第二任务。
138.进一步的,如图4所示,所述比较模块3021包括:
139.获取子模块30211,用于从所述全局任务就绪表中获取表内最高优先级任务对应的第一优先级标识;
140.所述获取子模块30211,还用于使所述目标核或所述其他核从自身的核任务就绪表中获取表内最高优先级任务对应的第二优先级标识;
141.比较子模块30212,用于将所述第一优先级标识和所述第二优先级标识进行比较;
142.所述获取子模块30212,还用于获取较高的优先级标识,其中,所述较高的优先级标识对应的任务为任务运行优先级最高的任务。
143.进一步的,如图4所示,所述装置包括:
144.添加单元304,用于在所述目标核运行所述第一任务时,当所述目标核等待所述第一任务对应触发消息的时长达到预设阈值时,将所述第一任务添加到所述目标核的阻塞列表内;
145.释放单元305,用于当所述其他核监测到所述触发消息时,使所述其他核向所述目标核释放信号量,所述信号量用于通知所述目标核释放阻塞的信号;
146.返还单元306,用于当所述第一任务与所述目标核不存在绑定关系时,在所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并返回到所述全局任务就绪表内。
147.进一步的,如图4所示,所述装置还包括:
148.所述添加单元304,还用于当所述第一任务与所述目标核存在绑定关系时,在所述目标核在获取到所述信号量之后,将所述第一任务从所述阻塞列表中释放并添加到所述目标核的核任务就绪表内;
149.传递单元307,用于使所述其他核将所述触发消息传递给所述目标核并触发核间中断指令,所述核间中断指令用于通知所述目标核做任务切换;
150.获取单元308,用于根据所述核间中断指令,使所述目标核从所述核任务就绪表内获取所述第一任务;
151.所述运行单元303,还用于根据所述触发消息,使所述目标核重新运行所述第一任
务。
152.进一步的,如图4所示,所述装置还包括:
153.终止单元309,用于当所述目标核接收到定时中断指令时,使所述目标核终止运行当前任务;
154.切换单元310,用于根据所述定时中断指令,使所述目标核执行任务切换操作。
155.进一步的,如图4所示,所述切换单元310包括:
156.获取模块3101,用于使所述目标核通过抢占所述自旋锁去获取访问所述全局任务就绪表的权限;
157.确定模块3102,用于使所述目标核通过将所述全局任务就绪表内任务与自身的核任务就绪表内任务进行比较,确定任务运行优先级当前最高的第三任务;
158.运行模块3103,用于使所述目标核运行所述第三任务并释放自旋锁。
159.综上所述,本发明实施例提供一种基于多核cpu的freertos运行任务方法及装置,首先是需要初始化配置多核cpu,多个核是通过抢占自旋锁来获取访问全局任务就绪表的权限的,那么对于抢占到自旋锁的核可以称为目标核,而对于等待自旋锁被释放的核称为其他核。由此每个核都有机会抢占到自旋锁而获取访问全局任务就绪表的权限,继而每个核都能够根据全局任务就绪表和自身核任务就绪表内任务的优先级确定选出一个任务,那么每个核都能够各自独立地运行被选出的任务。只是当自旋锁被抢占时只有一个核去执行这样的操作而已,但是由于当目标核获取到被选出的任务之后就会释放自旋锁,即运行了这个被选出的任务并会释放自旋锁,所以不会占用自旋锁时间过久且不会耽搁其他核获取任务的操作,从而实现了多个核能够同时各自独立运行相应的任务。相较于现有技术,解决了现有的freertos实时操作系统不支持多核cpu的问题,对于freertos实时操作系统运行在多核cpu上,本发明实施例真正地实现了支持多任务同时运行,确保了多核cpu充分发挥cpu的性能。
160.所述基于多核cpu的freertos运行任务装置包括处理器和存储器,上述配置单元、确定单元和运行单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
161.处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来使freertos实时操作系统运行在多核cpu上,真正地实现了支持多任务同时运行,确保了多核cpu充分发挥cpu的性能。
162.本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的基于多核cpu的freertos运行任务方法。
163.本发明实施例提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于多核cpu的freertos运行任务方法。
164.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
165.在一个典型的配置中,设备包括一个或多个处理器(cpu)、存储器和总线。设备还可以包括输入/输出接口、网络接口等。
166.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
167.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
168.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
169.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
170.以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1