SylixOS 优先级值越小优先级越大,POSIX 优先级值越大优先级越大。
SylixOS 优先级配置文件位置为libsylixos\SylixOS\kernel\include\k_priority.h
/***************************************************************************
优先级范围
***************************************************************************/
#define LW_PRIO_HIGHEST 0 /* SylixOS 最高优先级 */
#define LW_PRIO_LOWEST 255 /* SylixOS 最低优先级 */
/***************************************************************************
优先级 (一般应用的最高优先级不能高于 LW_PRIO_CRITICAL 最低不能低过 LW_PRIO_LOW)
***************************************************************************/
#define LW_PRIO_EXTREME LW_PRIO_HIGHEST /* 最高优先级 */
#define LW_PRIO_CRITICAL 50 /* 关键处理任务 */
#define LW_PRIO_REALTIME 100 /* 实时处理任务 */
#define LW_PRIO_HIGH 150 /* 高优先级任务 */
#define LW_PRIO_NORMAL 200 /* 正常优先级 */
#define LW_PRIO_LOW 250 /* 低优先级 */
#define LW_PRIO_IDLE LW_PRIO_LOWEST /* 最低优先级 */
优先级转换操作宏见libsylixos\SylixOS\posix\include\px_sched_param.h
/***************************************************************************
sched priority convert with SylixOS
***************************************************************************/
#define PX_PRIORITY_CONVERT(prio) (LW_PRIO_LOWEST - (prio))
POSIX线程属性块默认参数初始化操作如下:
/******************************************************************************
** 函数名称: pthread_attr_init
** 功能描述: 初始化线程属性块.
** 输 入 : pattr 需要初始化的 attr 指针.
** 输 出 : ERROR CODE
** 全局变量:
** 调用模块:
API 函数
***************************************************************************/
LW_API
int pthread_attr_init (pthread_attr_t *pattr)
{
if (pattr == LW_NULL) {
errno = EINVAL;
return (EINVAL);
}
pattr->PTHREADATTR_pcName = "pthread";
pattr->PTHREADATTR_pvStackAddr = LW_NULL; /* 自动分配堆栈 */
pattr->PTHREADATTR_stStackGurad = LW_CFG_THREAD_DEFAULT_GUARD_SIZE;
pattr->PTHREADATTR_stStackByteSize = 0; /* 0 表示继承创建者优先级 */
pattr->PTHREADATTR_iSchedPolicy = LW_OPTION_SCHED_RR; /* 调度策略 */
pattr->PTHREADATTR_iInherit = PTHREAD_EXPLICIT_SCHED; /* 继承性 */
pattr->PTHREADATTR_ulOption = LW_OPTION_THREAD_STK_CHK; /* SylixOS 线程创建选项 */
pattr->PTHREADATTR_schedparam.sched_priority = LW_PRIO_NORMAL;
return (ERROR_NONE);
}