您的位置:首页 > 其它

uC/OS-II 学习笔记之:任务挂起与恢复,调度器上锁与解锁!

2013-03-14 22:34 387 查看
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一、任务挂起的概念:将任务的运行状态转为等待态(或称阻塞态)的过程叫做任务的挂起,任务被挂起后它的运行就停止了!

(1)任务挂起函数:OSTaskSuspend(INT8U prio)//prio为任务的优先级别

用户任务可调用OSTaskSuspend()来挂起自身或者其它任务(当然不能用它来挂起空闲任务了),

被挂起的任务在恢复前就不会在运行了。

(2)任务恢复函数:OSTaskResume(INT8U prio)//prio为任务的优先级别

被函数OSTaskSuspend()挂起的任务只能在其它任务(除自身外的任务)中通过调用OSTaskResume()函数使其恢复为就绪状态。

(3)任务挂起函数与恢复函数的简单使用:

//任务n,串口发送

void Usart(void *pdata)

{

char USART_DX_BUF[] = "abcdefg";

char i = 0;

int j = 0;

while (1)

{

for (i=0; i<7; ++i)

{

USART1->DR = USART_DX_BUF[i];

while ((USART1->SR & 0X40) == 0);

if (50 == j)

{

OSTaskSuspend(1);//将优先级别为1的任务挂起

}

else if (200 == j)

{

OSTaskResume(1);//将优先级别为1的任务恢复

j = 0;

}

j++;

}

OSTimeDlyHMSM(0, 0, 0, 100);

}

}

解析:此函数就是在任务n中将优先级别为1的任务挂起,当变量j从0自增到50时,就将优先级别为1的任务挂起,从50自增到200时,再将该任务恢复;j在50到200这个范围内时,该任务是不会运行的!

(4)在此值得一提的是,被挂起的任务并非处于挂起态,而是处于等待态(或阻塞态)。被挂起的任务在恢复后就直接进入运行态了,而任务因为中断使其失去CPU的控制权限才会进入挂起态,处于挂起态的任务除非中断结束后其优先级仍是最高的,否则它将不会立即获得运行。(对此不理解的同学请猛击文章开头的连接,参考我的关于可剥夺型内核的文章)



二、调度器上锁的概念:调度器上锁后,任务调度就不再进行。假设是在任务n中将调度器上锁,那么系统就只运行任务n,将调度器解锁后,其它任务才会得到系统的调度而运行!

(1)调度器上锁函数:OSSchedLock(void)//形参为空

(2)调度器解锁函数:OSSchedUnlock(void)//形参为空

(3)调度器上锁函数与调度器解锁函数的简单使用:

//任务n,串口发送

void Usart(void *pdata)

{

char USART_DX_BUF[] = "abcdefg";

char i = 0;

int j = 0;

while (1)

{

for (i=0; i<7; ++i)

{

USART1->DR = USART_DX_BUF[i];

while ((USART1->SR & 0X40) == 0);

if (50 == j)

{

OSSchedLock();//任务调度器上锁

}

else if (1000 == j)

{

OSSchedUnlock();//任务调度器解锁

j = 0;

}

j++;

}

OSTimeDlyHMSM(0, 0, 0, 100);

}

}

解析:在此函数中,当j处于50到1000这个范围内时,系统仅运行任务n,其它任务都不会获得运行!



参: 任哲 《嵌入式实时操作系统uC/OS-II原理及应用》

参: 卢有亮 《嵌入式实时操作系统uC/OS原理与实践》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: