Example #1
0
/*********************************************************************************************************
** 函数名称: sched_setparam
** 功能描述: 设置指定任务调度器参数
** 输 入  : pid           进程 / 线程 ID
**           pschedparam   调度器参数
** 输 出  : ERROR or OK
** 全局变量:
** 调用模块:
                                           API 函数
*********************************************************************************************************/
LW_API
int  sched_setparam (pid_t  pid, const struct sched_param  *pschedparam)
{
    UINT8               ucPriority;
    ULONG               ulError;
    LW_OBJECT_HANDLE    ulThread;

    if (pschedparam == LW_NULL) {
        errno = EINVAL;
        return  (PX_ERROR);
    }
    if ((pschedparam->sched_priority < __PX_PRIORITY_MIN) ||
            (pschedparam->sched_priority > __PX_PRIORITY_MAX)) {
        errno = EINVAL;
        return  (PX_ERROR);
    }

    ucPriority= (UINT8)PX_PRIORITY_CONVERT(pschedparam->sched_priority);

#if LW_CFG_MODULELOADER_EN > 0
    if (pid == 0) {
        pid =  getpid();
    }
    if (pid == 0) {
        ulThread = API_ThreadIdSelf();
    } else {
        ulThread = vprocMainThread(pid);
    }
    if (ulThread == LW_OBJECT_HANDLE_INVALID) {
        errno = ESRCH;
        return  (PX_ERROR);
    }
#else
    ulThread = (LW_OBJECT_HANDLE)pid;
    PX_ID_VERIFY(ulThread, LW_OBJECT_HANDLE);
#endif                                                                  /*  LW_CFG_MODULELOADER_EN > 0  */

    ulError = API_ThreadSetPriority(ulThread, ucPriority);
    if (ulError) {
        errno = ESRCH;
        return  (PX_ERROR);
    } else {
        return  (ERROR_NONE);
    }
}
Example #2
0
/*********************************************************************************************************
** 函数名称: ls1xLedIoctl
** 功能描述: LED 控制
** 输 入  : pfdentry 设备表结构地址
**           iCmd     命令
**           lArg     参数
** 输 出  : 错误号
*********************************************************************************************************/
static INT  ls1xLedIoctl (PLW_FD_ENTRY   pfdentry, INT  iCmd, LONG  lArg)
{
    PLS1XLED_DEV    pled = (PLS1XLED_DEV)pfdentry->FDENTRY_pdevhdrHdr;
    struct stat    *pstat;

    switch (iCmd) {
    case FIOFSTATGET:
        pstat = (struct stat *)lArg;
        if (pstat) {
            pstat->st_dev       = (dev_t)pled;
            pstat->st_ino       = (ino_t)0;
            pstat->st_mode      = (S_IRUSR | S_IRGRP | S_IROTH);
            pstat->st_nlink     = 1;
            pstat->st_uid       = 0;
            pstat->st_gid       = 0;
            pstat->st_rdev      = 0;
            pstat->st_size      = 0;
            pstat->st_blksize   = 0;
            pstat->st_blocks    = 0;
            pstat->st_atime     = pled->LED_time;
            pstat->st_mtime     = pled->LED_time;
            pstat->st_ctime     = pled->LED_time;
            return  (ERROR_NONE);
        }
        return  (PX_ERROR);
    case FIOSETFL:
        if ((int)lArg & O_NONBLOCK) {
            pfdentry->FDENTRY_iFlag |= O_NONBLOCK;
        } else {
            pfdentry->FDENTRY_iFlag &= ~O_NONBLOCK;
        }
        return  (ERROR_NONE);
    case 0:
        API_SemaphoreBPostEx(pled->LED_hSemaphoreB, (VOID *)lArg);
        return  (ERROR_NONE);
    case 1:
        API_ThreadSetPriority(pled->LED_hThread, (UINT8)lArg);
        return  (ERROR_NONE);
    }
    return  (PX_ERROR);
}
Example #3
0
/*********************************************************************************************************
** 函数名称: sched_setscheduler
** 功能描述: 设置指定任务调度器
** 输 入  : pid           进程 / 线程 ID
**           iPolicy       调度策略
**           pschedparam   调度器参数
** 输 出  : ERROR or OK
** 全局变量:
** 调用模块:
                                           API 函数
*********************************************************************************************************/
LW_API
int  sched_setscheduler (pid_t                      pid,
                         int                        iPolicy,
                         const struct sched_param  *pschedparam)
{
    UINT8               ucPriority;
    UINT8               ucActivatedMode;
    LW_OBJECT_HANDLE    ulThread;

    if (pschedparam == LW_NULL) {
        errno = EINVAL;
        return  (PX_ERROR);
    }

    if ((iPolicy != LW_OPTION_SCHED_FIFO) &&
            (iPolicy != LW_OPTION_SCHED_RR)) {
        errno = EINVAL;
        return  (PX_ERROR);
    }

    if ((pschedparam->sched_priority < __PX_PRIORITY_MIN) ||
            (pschedparam->sched_priority > __PX_PRIORITY_MAX)) {
        errno = EINVAL;
        return  (PX_ERROR);
    }

    ucPriority= (UINT8)PX_PRIORITY_CONVERT(pschedparam->sched_priority);

#if LW_CFG_MODULELOADER_EN > 0
    if (pid == 0) {
        pid =  getpid();
    }
    if (pid == 0) {
        ulThread = API_ThreadIdSelf();
    } else {
        ulThread = vprocMainThread(pid);
    }
    if (ulThread == LW_OBJECT_HANDLE_INVALID) {
        errno = ESRCH;
        return  (PX_ERROR);
    }
#else
    ulThread = (LW_OBJECT_HANDLE)pid;
    PX_ID_VERIFY(ulThread, LW_OBJECT_HANDLE);
#endif                                                                  /*  LW_CFG_MODULELOADER_EN > 0  */

    if (API_ThreadGetSchedParam(ulThread,
                                LW_NULL,
                                &ucActivatedMode)) {
        errno = ESRCH;
        return  (PX_ERROR);
    }

    API_ThreadSetSchedParam(ulThread, (UINT8)iPolicy, ucActivatedMode);

    if (API_ThreadSetPriority(ulThread, ucPriority)) {
        errno = ESRCH;
        return  (PX_ERROR);
    } else {
        return  (ERROR_NONE);
    }
}