XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
调度器
调度器 的协作图:

模块

 调度优先级
 
 上下文类型
 

宏定义

#define XWOS_THD_LOCAL_DATA_NUM   XWOSDL_THD_LOCAL_DATA_NUM
 XWOS API:线程本地数据指针的数量
 

函数

static bool xwos_skd_prio_tst_valid (xwpr_t prio)
 XWOS API:检查优先级是否有效
 
static xwer_t xwos_skd_start_lc (void)
 XWOS API:启动当前CPU的调度器
 
static xwid_t xwos_skd_get_cpuid_lc (void)
 XWOS API:获取当前CPU的ID
 
static void xwos_skd_get_context_lc (xwsq_t *ctxbuf, xwirq_t *irqnbuf)
 XWOS API:获取当前代码的上下文
 
static void xwos_skd_dspmpt_lc (void)
 XWOS API:关闭本地CPU调度器的抢占
 
static void xwos_skd_enpmpt_lc (void)
 XWOS API:开启本地CPU调度器的抢占
 
static void xwos_skd_dsbh_lc (void)
 XWOS API:关闭本地CPU调度器的中断底半部
 
static void xwos_skd_enbh_lc (void)
 XWOS API:开启本地CPU调度器的中断底半部
 
static xwer_t xwos_skd_continue_lc (void)
 XWOS API:继续运行本地CPU调度器
 
static xwer_t xwos_skd_pause_lc (void)
 XWOS API:暂停本地CPU调度器
 

详细描述

技术参考手册: 调度器

调度优先级

XWOS的优先级,用类型 xwpr_t 表示:

上下文

XWOS将上下文分为五种,定义可以参考 上下文类型 , 当前代码的上下文可以通过 xwos_skd_get_context_lc() 获取。

CPU ID

启动调度

系统启动时,每个CPU都需要调用一次 xwos_skd_start_lc() 启动调度。

抢占

需要注意,关闭多少次抢占,就要打开相同次数的抢占。

中断底半部

当配置 XWOSCFG_SKD_BH1 ,XWOS的某些系统函数运行在中断底半部。 例如定时器任务。

需要注意,关闭多少次中断底半部,就要打开相同次数的中断底半部。

当配置 XWOSCFG_SKD_BH0 ,中断底半部被彻底禁用, xwos_skd_dsbh_lc()xwos_skd_enbh_lc() 可被调用。

调度器的暂停与继续

C++

C++头文件: xwos/osal/skd.hxx

宏定义说明

◆ XWOS_THD_LOCAL_DATA_NUM

#define XWOS_THD_LOCAL_DATA_NUM   XWOSDL_THD_LOCAL_DATA_NUM

XWOS API:线程本地数据指针的数量

在文件 skd.h149 行定义.

函数说明

◆ xwos_skd_continue_lc()

static xwer_t xwos_skd_continue_lc ( void  )
inlinestatic

XWOS API:继续运行本地CPU调度器

返回
错误码
注解
  • 上下文:任意

继续运行调度器包括几个操作:

  • 1. 启动本地CPU的系统定时器;
  • 2. 打开本地CPU调度器的中断底半部;
  • 3. 打开本地CPU调度器的抢占。

在文件 skd.h265 行定义.

266{
267 return xwosdl_skd_continue_lc();
268}
这是这个函数的调用关系图:

◆ xwos_skd_dsbh_lc()

static void xwos_skd_dsbh_lc ( void  )
inlinestatic

XWOS API:关闭本地CPU调度器的中断底半部

注解
  • 上下文:线程、中断、中断底半部、空闲任务

在文件 skd.h237 行定义.

238{
239 xwosdl_skd_dsbh_lc();
240}
这是这个函数的调用关系图:

◆ xwos_skd_dspmpt_lc()

static void xwos_skd_dspmpt_lc ( void  )
inlinestatic

XWOS API:关闭本地CPU调度器的抢占

注解
  • 上下文:线程、中断、中断底半部、空闲任务

在文件 skd.h215 行定义.

216{
217 xwosdl_skd_dspmpt_lc();
218}
这是这个函数的调用关系图:

◆ xwos_skd_enbh_lc()

static void xwos_skd_enbh_lc ( void  )
inlinestatic

XWOS API:开启本地CPU调度器的中断底半部

注解
  • 上下文:线程、中断、中断底半部、空闲任务

在文件 skd.h248 行定义.

249{
250 xwosdl_skd_enbh_lc();
251}
这是这个函数的调用关系图:

◆ xwos_skd_enpmpt_lc()

static void xwos_skd_enpmpt_lc ( void  )
inlinestatic

XWOS API:开启本地CPU调度器的抢占

注解
  • 上下文:线程、中断、中断底半部、空闲任务

在文件 skd.h226 行定义.

227{
228 xwosdl_skd_enpmpt_lc();
229}
这是这个函数的调用关系图:

◆ xwos_skd_get_context_lc()

static void xwos_skd_get_context_lc ( xwsq_t ctxbuf,
xwirq_t irqnbuf 
)
inlinestatic

XWOS API:获取当前代码的上下文

参数
[out]ctxbuf指向缓冲区的指针,通过此缓冲区返回当前上下文, 返回值 上下文类型
[out]irqnbuf指向缓冲区的指针,通过此缓冲区返回中断号
注解
  • 上下文:任意

在文件 skd.h204 行定义.

205{
206 xwosdl_skd_get_context_lc(ctxbuf, irqnbuf);
207}
这是这个函数的调用关系图:

◆ xwos_skd_get_cpuid_lc()

static xwid_t xwos_skd_get_cpuid_lc ( void  )
inlinestatic

XWOS API:获取当前CPU的ID

返回
当前CPU的ID
注解
  • 上下文:线程、中断、中断底半部、空闲任务

在文件 skd.h190 行定义.

191{
192 return xwosdl_skd_get_cpuid_lc();
193}
这是这个函数的调用关系图:

◆ xwos_skd_pause_lc()

static xwer_t xwos_skd_pause_lc ( void  )
inlinestatic

XWOS API:暂停本地CPU调度器

返回
错误码
注解
  • 上下文:任意

暂停调度器包括几个操作:

  • 1. 关闭本地CPU调度器的抢占;
  • 2. 关闭本地CPU调度器的中断底半部;
  • 3. 关闭本地CPU的系统定时器。

在文件 skd.h282 行定义.

283{
284 return xwosdl_skd_pause_lc();
285}

◆ xwos_skd_prio_tst_valid()

static bool xwos_skd_prio_tst_valid ( xwpr_t  prio)
inlinestatic

XWOS API:检查优先级是否有效

参数
[in]prio优先级
返回
布尔值
返回值
true
false
注解
  • 上下文:任意

在文件 skd.h162 行定义.

163{
164 return xwosdl_skd_prio_tst_valid(prio);
165}

◆ xwos_skd_start_lc()

static xwer_t xwos_skd_start_lc ( void  )
inlinestatic

XWOS API:启动当前CPU的调度器

返回
此函数不会返回
注解
  • 上下文:启动

此函数被调用后,调度器将开始调度,上下文(Context)也从 启动 切换为 线程 。 调度器启动后,此函数不会返回。 此函数只能在 xwos_init() 之后被调用。

在文件 skd.h178 行定义.

179{
180 return xwosdl_skd_start_lc();
181}
这是这个函数的调用关系图: