zth_gyj的个人空间 https://bbs.21ic.com/?1515268 [收藏] [复制] [RSS]

日志

[原创]SylixOS优先级与POSIX优先级关系

已有 448 次阅读2015-7-20 11:22 |个人分类:SylixOS|系统分类:嵌入式系统| 优先级

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);
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)