uCOS-II任务管理之改变任务优先级 [转载]

uCOS-II中改变任务优先级主要通过调用OSTaskChangePrio函数实现,该函数接收原优先级和新优先级作为参数。任务的优先级实际是通过修改任务控制块内的OSTCBPrio等变量来实现。当任务优先级改变且高于当前任务或旧优先级时,任务调度器会被触发。
摘要由CSDN通过智能技术生成
uCOS-II任务管理之改变任务的优先级
在uCOS-II 里,任务的优先级也是是可以修改的。优先级翻转问题是可以通过改变任务优先级解决。
那什么是优先级翻转问题呢?
所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
如果在访问共享资源时,恰当地修改任务的优先级就可以解决优先级翻转问题了。
但改变任务的优先级也是很花时间的,如果不发生优先级翻转而提升了任务的优先级,释放资源后又改回原优先级,则无形中浪费了许多CPU时。在mcu21项目中并没有改变任务的优先级。

改变任务的优先级的操作也是很简单的。主要是调用uCOS-II 系统函数OSTaskChangePrio (INT8U oldprio, INT8U newprio); ,它需要两个参数,一个任务原来的优先级,一个是任务改变后的优先级。


下面深入地解剖下OSTaskChangePrio (INT8U oldprio, INT8U newprio)的实现过程:
系统函数OSTaskChangePrio()

INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
    OS_TCB   *ptcb;
    OS_EVENT *pevent;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值