技术参考手册: 调度器
调度优先级
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}