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 int * xwos_skd_get_errno_lc (void)
 XWOS API:获取当前上下文的 errno 的地址
 
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() 获取。

libc的 <tt>errno</tt>

为了兼容libc,XWOS将libc的 errno 实现为每线程独立的私有变量, 可以通过 xwos_skd_get_errno_lc() 获取 errno 的地址。

CPU ID

启动调度

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

抢占

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

中断底半部

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

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

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

调度器的暂停与继续

宏定义说明

◆ XWOS_THD_LOCAL_DATA_NUM

#define XWOS_THD_LOCAL_DATA_NUM   XWOSDL_THD_LOCAL_DATA_NUM

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

在文件 skd.h156 行定义.

函数说明

◆ xwos_skd_prio_tst_valid()

static bool xwos_skd_prio_tst_valid ( xwpr_t  prio)
inlinestatic

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

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

在文件 skd.h169 行定义.

170{
171 return xwosdl_skd_prio_tst_valid(prio);
172}

◆ xwos_skd_start_lc()

static xwer_t xwos_skd_start_lc ( void  )
inlinestatic

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

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

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

在文件 skd.h185 行定义.

186{
187 return xwosdl_skd_start_lc();
188}
这是这个函数的调用关系图:

◆ xwos_skd_get_cpuid_lc()

static xwid_t xwos_skd_get_cpuid_lc ( void  )
inlinestatic

XWOS API:获取当前CPU的ID

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

在文件 skd.h197 行定义.

198{
199 return xwosdl_skd_get_cpuid_lc();
200}
这是这个函数的调用关系图:

◆ 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.h211 行定义.

212{
213 xwosdl_skd_get_context_lc(ctxbuf, irqnbuf);
214}
这是这个函数的调用关系图:

◆ xwos_skd_get_errno_lc()

static int * xwos_skd_get_errno_lc ( void  )
inlinestatic

XWOS API:获取当前上下文的 errno 的地址

返回
errno 的指针
  • errno 是libc中定义的错误码,XWOS将其定义为每线程独立的私有变量:
    • 当上下文为线程时,返回当前线程的 errno
    • 当上下文为其他时,返回调度器的 errno
      注解
  • 上下文:任意

在文件 skd.h227 行定义.

228{
229 return xwosdl_skd_get_errno_lc();
230}

◆ xwos_skd_dspmpt_lc()

static void xwos_skd_dspmpt_lc ( void  )
inlinestatic

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

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

在文件 skd.h238 行定义.

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

◆ xwos_skd_enpmpt_lc()

static void xwos_skd_enpmpt_lc ( void  )
inlinestatic

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

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

在文件 skd.h249 行定义.

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

◆ xwos_skd_dsbh_lc()

static void xwos_skd_dsbh_lc ( void  )
inlinestatic

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

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

在文件 skd.h260 行定义.

261{
262 xwosdl_skd_dsbh_lc();
263}
这是这个函数的调用关系图:

◆ xwos_skd_enbh_lc()

static void xwos_skd_enbh_lc ( void  )
inlinestatic

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

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

在文件 skd.h271 行定义.

272{
273 xwosdl_skd_enbh_lc();
274}
这是这个函数的调用关系图:

◆ xwos_skd_continue_lc()

static xwer_t xwos_skd_continue_lc ( void  )
inlinestatic

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

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

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

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

在文件 skd.h288 行定义.

289{
290 return xwosdl_skd_continue_lc();
291}
这是这个函数的调用关系图:

◆ xwos_skd_pause_lc()

static xwer_t xwos_skd_pause_lc ( void  )
inlinestatic

XWOS API:暂停本地CPU调度器

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

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

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

在文件 skd.h305 行定义.

306{
307 return xwosdl_skd_pause_lc();
308}