技术参考手册: 调度器
调度优先级
XWOS的优先级,用类型 xwpr_t 表示:
上下文
XWOS将上下文分为五种,定义可以参考 上下文类型 , 当前代码的上下文可以通过 xwos_skd_get_context_lc() 获取。
CPU ID
启动调度
系统启动时,每个CPU都需要调用一次 xwos_skd_start_lc() 启动调度。
抢占
需要注意,关闭多少次抢占,就要打开相同次数的抢占。
中断底半部
当配置 XWOSCFG_SKD_BH 为 1 ,XWOS的某些系统函数运行在中断底半部。 例如定时器任务。
需要注意,关闭多少次中断底半部,就要打开相同次数的中断底半部。
当配置 XWOSCFG_SKD_BH 为 0 ,中断底半部被彻底禁用, 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.h 第 149 行定义.
 
 
◆ xwos_skd_continue_lc()
  
  | 
        
          | static xwer_t xwos_skd_continue_lc | ( | void |  | ) |  |  | inlinestatic | 
 
XWOS API:继续运行本地CPU调度器 
- 返回
- 错误码 
- 注解
- 
继续运行调度器包括几个操作:
- 1. 启动本地CPU的系统定时器;
- 2. 打开本地CPU调度器的中断底半部;
- 3. 打开本地CPU调度器的抢占。 
在文件 skd.h 第 265 行定义.
  266{
  267        return xwosdl_skd_continue_lc();
  268}
 
 
◆ xwos_skd_dsbh_lc()
  
  | 
        
          | static void xwos_skd_dsbh_lc | ( | void |  | ) |  |  | inlinestatic | 
 
XWOS API:关闭本地CPU调度器的中断底半部 
- 注解
- 
在文件 skd.h 第 237 行定义.
  238{
  239        xwosdl_skd_dsbh_lc();
  240}
 
 
◆ xwos_skd_dspmpt_lc()
  
  | 
        
          | static void xwos_skd_dspmpt_lc | ( | void |  | ) |  |  | inlinestatic | 
 
XWOS API:关闭本地CPU调度器的抢占 
- 注解
- 
在文件 skd.h 第 215 行定义.
  216{
  217        xwosdl_skd_dspmpt_lc();
  218}
 
 
◆ xwos_skd_enbh_lc()
  
  | 
        
          | static void xwos_skd_enbh_lc | ( | void |  | ) |  |  | inlinestatic | 
 
XWOS API:开启本地CPU调度器的中断底半部 
- 注解
- 
在文件 skd.h 第 248 行定义.
  249{
  250        xwosdl_skd_enbh_lc();
  251}
 
 
◆ xwos_skd_enpmpt_lc()
  
  | 
        
          | static void xwos_skd_enpmpt_lc | ( | void |  | ) |  |  | inlinestatic | 
 
XWOS API:开启本地CPU调度器的抢占 
- 注解
- 
在文件 skd.h 第 226 行定义.
  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.h 第 204 行定义.
  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.h 第 190 行定义.
  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.h 第 282 行定义.
  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:检查优先级是否有效 
- 参数
- 
  
  
- 返回
- 布尔值 
- 返回值
- 
  
  
- 注解
- 
在文件 skd.h 第 162 行定义.
  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.h 第 178 行定义.
  179{
  180        return xwosdl_skd_start_lc();
  181}