2回答

0收藏

OS_PRIO_SELF为什么要用它来表示任务自身的优先级?

#开源分享 #开源分享 3469 人阅读 | 2 人回复 | 2014-02-18

if (oldprio >= OS_LOWEST_PRIO) {
        if (oldprio != OS_PRIO_SELF) {
            return (OS_ERR_PRIO_INVALID);
        }
    }
这里的是参数检查是搞明白了的,但是下面的代码干嘛这样用
if (oldprio == OS_PRIO_SELF) {                          /* See if changing self                    */
        oldprio = OSTCBCur->OSTCBPrio;                      /* Yes, get priority                       */
    }
    ptcb = OSTCBPrioTbl[oldprio];

直接用ptcb = OSTCBPrioTbl[oldprio];把前面的改成不要超过OS_LOWEST_PRIO就行了吧。

求助详细解释哈OS_PRIO_SELF这玩意?
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

laoliang-67665

发表于 2014-2-24 11:35:43 | 只看该作者

这个代码是在
INT8U  

if (oldprio == OS_PRIO_SELF) {                          /* 如果是改变本任务的优先级*/
        oldprio = OSTCBCur->OSTCBPrio;                      /* 从任务控制块中取出本任务的优先OSTaskChangePrio (INT8U  oldprio,
                         INT8U  newprio)
级               */
    }   
    ptcb = OSTCBPrioTbl[oldprio];

看OS_PRIO_SELF的定义 #define  OS_PRIO_SELF                0xFFu  
如果参数oldprio为OS_PRIO_SELF ,就是改变自己的优先级,这样写代码可读性强,比较容易懂,不容易错
例如
OSTaskChangePrio (OS_PRIO_SELF,
                         30)    //将被任务优先级改为30


嵌入式,ucos,FPGA系统书籍作者
板凳

yilusuiyuan

发表于 2014-2-24 11:41:29 | 只看该作者

亮点 发表于 2014-2-24 11:35
这个代码是在
INT8U  

恩,有的地方是方便多了!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条