uCOS-II任务管理之改变任务的优先级
在uCOS-II 里,任务的优先级也是是可以修改的。优先级翻转问题是可以通过改变任务优先级解决。
那什么是优先级翻转问题呢?
所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
如果在访问共享资源时,恰当地修改任务的优先级就可以解决优先级翻转问题了。
但改变任务的优先级也是很花时间的,如果不发生优先级翻转而提升了任务的优先级,释放资源后又改回原优先级,则无形中浪费了许多CPU时。在mcu21项目中并没有改变任务的优先级。
系统函数OSTaskChangePrio()
在uCOS-II 里,任务的优先级也是是可以修改的。优先级翻转问题是可以通过改变任务优先级解决。
那什么是优先级翻转问题呢?
所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
如果在访问共享资源时,恰当地修改任务的优先级就可以解决优先级翻转问题了。
但改变任务的优先级也是很花时间的,如果不发生优先级翻转而提升了任务的优先级,释放资源后又改回原优先级,则无形中浪费了许多CPU时。在mcu21项目中并没有改变任务的优先级。
改变任务的优先级的操作也是很简单的。主要是调用uCOS-II 系统函数OSTaskChangePrio (INT8U oldprio, INT8U newprio); ,它需要两个参数,一个任务原来的优先级,一个是任务改变后的优先级。
系统函数OSTaskChangePrio()
INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
OS_TCB *ptcb;
OS_EVENT *pevent;