函数描述

OSTaskSuspend()
功能描述:无条件挂起一个任务。调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身。
函数原型:INT8U OSTaskSuspend ( INT8U prio);
参数说明:prio为指定要获取挂起的任务优先级,也可以指定参数OS_PRIO_SELF,挂起任务本身。此时,下一个优先级最高的就绪任务将运行。
返回值:
OSTaskSuspend()的返回值为下述之一:
 OS_NO_ERR:函数调用成功。
 OS_TASK_ SUSPEND_IDLE:试图挂起μC/OS-II中的空闲任务(Idle task)。此为非法操作。
 OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO或没有设定OS_PRIO_SELF的值。
 OS_TASK_ SUSPEND _PRIO:要挂起的任务不存在。

OSTaskResume()
功能描述:唤醒一个用OSTaskSuspend()函数挂起的任务。OSTaskResume()也是唯一能“解挂”挂起任务的函数。
函数原型:NT8U OSTaskResume ( INT8U prio)
参数说明:prio指定要唤醒任务的优先级 
返回值:
OSTaskResume ()的返回值为下述之一:
 OS_NO_ERR:函数调用成功。
 OS_TASK_RESUME_PRIO:要唤醒的任务不存在。
 OS_TASK_NOT_SUSPENDED:要唤醒的任务不在挂起状态。
 OS_PRIO_INVALID:参数指定的优先级大于或等于OS_LOWEST_PRIO。

使用注意

  当前任务挂起后,只有其他任务才能唤醒被挂起的任务。任务挂起后,系统会重新进行任务调度,运行下一个优先级最高的就绪任务。唤醒挂起任务需要调用函数OSTaskResume()。 任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待对列中清除后也不能立即运行,而必须等到被唤醒后。

一个测试范例

测试平台:STM32

测试代码:

#define StartTaskPrio      4
#define TASK1_PRIO 5
#define TASK2_PRIO 6 int main(void)
{
USART1_Config();
OSInit();
OSTaskCreate(StartTask, (void *), &StartTaskStk[StartTaskStkLength-], StartTaskPrio);
OSStart();
return ;
} void StartTask(void *p_arg)
{
(void)p_arg;

USART1_printf("\nStartTask has been running !");
SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
OSTaskCreate(Task1, (void *), &task1_stk[TASK1_STK_SIZE-], TASK1_PRIO);
OSTaskCreate(Task2, (void *), &task2_stk[TASK2_STK_SIZE-], TASK2_PRIO);
OSTaskSuspend(StartTaskPrio);
} void Task1(void *p_arg)
{
(void)p_arg; while(){
USART1_printf("\nTask1 has been running !");
OSTaskSuspend(TASK1_PRIO);
}
} void Task2(void *p_arg)
{
(void)p_arg; while(){
USART1_printf("\n\nTask2 start running !");
OSTaskResume(TASK1_PRIO);
     USART1_printf("\nTask2 has been running !");
OSTimeDly(*OS_TICKS_PER_SEC);
}
}

程序执行时序流程:

运行结果:

参考资料:《杭电UCOS-II-ARM7实验指导书》

最新文章

  1. 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理
  2. C# if中连续几个条件判断
  3. 有关emoji表情以及utf-16编码
  4. BaseAdapter的getView()方法
  5. x01.os.15: 看上去很美
  6. SQLMAP源码分析-目录结构
  7. Delphi 调用 Rest 服务的一些
  8. iOS开发零碎笔记
  9. Android 技术用于汇总
  10. 深入浅出Java并发包—原子类操作
  11. QUI操作超时弹出登录窗口登录的处理方式
  12. c++ 文件写样例
  13. Book of Evil 树双向DFS
  14. AES加密时抛出java.security.InvalidKeyException: Illegal key size or def
  15. Scope and Namespace
  16. fidder 调试本地文件
  17. jQuery中的DOM操作------复制及包裹节点
  18. 利用JQuery直接调用asp.net后台方法
  19. Maven 基本的认识
  20. phpstorm本地怎么上传到服务器

热门文章

  1. php常用系统函数
  2. C#_MVC_分页update
  3. 深圳安全研讨会圆满结束,PPT共享下载
  4. [数据库]Oracle和mysql中的分页总结
  5. 用js操作表格
  6. js 刷新页面自动回到顶部
  7. c# 远程监控(4) 接收端 RTP包重组 分屏显示
  8. 【转】oracle的substr函数的用法
  9. 支持IE,FireFox,Chrome三大主流浏览器,通过js+Flash方式将table导出Excel文件
  10. UDP 广播 Java