函数描述

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

测试代码:

  1. #define StartTaskPrio 4
  2. #define TASK1_PRIO 5
  3. #define TASK2_PRIO 6
  4.  
  5. int main(void)
  6. {
  7. USART1_Config();
  8. OSInit();
  9. OSTaskCreate(StartTask, (void *), &StartTaskStk[StartTaskStkLength-], StartTaskPrio);
  10. OSStart();
  11. return ;
  12. }
  13.  
  14. void StartTask(void *p_arg)
  15. {
  16. (void)p_arg;

  17. USART1_printf("\nStartTask has been running !");
  18. SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
  19. OSTaskCreate(Task1, (void *), &task1_stk[TASK1_STK_SIZE-], TASK1_PRIO);
  20. OSTaskCreate(Task2, (void *), &task2_stk[TASK2_STK_SIZE-], TASK2_PRIO);
  21. OSTaskSuspend(StartTaskPrio);
  22. }
  23.  
  24. void Task1(void *p_arg)
  25. {
  26. (void)p_arg;
  27.  
  28. while(){
  29. USART1_printf("\nTask1 has been running !");
  30. OSTaskSuspend(TASK1_PRIO);
  31. }
  32. }
  33.  
  34. void Task2(void *p_arg)
  35. {
  36. (void)p_arg;
  37.  
  38. while(){
  39. USART1_printf("\n\nTask2 start running !");
  40. OSTaskResume(TASK1_PRIO);
         USART1_printf("\nTask2 has been running !");
  41. OSTimeDly(*OS_TICKS_PER_SEC);
  42. }
  43. }

程序执行时序流程:

运行结果:

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

uCOS-II任务的挂起和恢复的更多相关文章

  1. ucos ii 百度官方介绍

          μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...

  2. java并发编程(三)线程挂起,恢复和终止的正确方法

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733    下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...

  3. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

    DE1-SOC开发板上搭建NIOS II处理器运行UCOS II   今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...

  4. MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess

    http://hi.baidu.com/xbbsh/blog/item/b73d3125462201084c088db1.html ---------------------------------- ...

  5. Windows 8 应用开发 - 挂起与恢复

    原文:Windows 8 应用开发 - 挂起与恢复      Windows 8 应用通常涉及到两种数据类型:应用数据与会话数据.在上一篇提到的本地数据存储就是应用层面的数据,包括应用参数设置.用户重 ...

  6. 转: 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用 ...

  7. Java知多少(65)线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  8. ucos ii 46个系统API函数解析

    源: ucos ii 46个系统API函数解析

  9. VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案

    在网上看说在服务里面启动 但也是不能用 电脑上说是WINDOWS无法启动VMware Authorization Service服务(位于本地计算机上)错误:1068 依赖服务或组无法启动 这个很简单 ...

  10. linux进程的挂起和恢复

    进程的挂起及恢复 #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前台执行:用bg命令将挂起的作业放到后台 ...

随机推荐

  1. 在aws ec2上使用root用户登录

    aws ec2默认是使用ec2-user账号登陆的,对很多文件夹是没有权限的.如何使用root账号执行命令就是一个问题了.解决办法如下: 1.根据官网提供的方法登录连接到EC2服务器(官网推荐wind ...

  2. swift 定义类方法(type methed)

    swift   中声明结构体或者枚举的类型方法,需要在func前加上关键字 ststic  ,但是如果要定义一个类的类方法时,需要用关键字 class class SomeClass { class ...

  3. kali Linux 文本图形界面切换遇到的怪问题

    前段装了在Virtual Box上装一个Kali Linux玩,然后设为了开机进入文本界面,后来遇到无法上网的问题,网上找到解决方法,说是NAT地址转换和host-only双网卡顺序问题,按照网上的说 ...

  4. loadjs异步加载javascript回调

    function loadjs(url,callback){    var script=document.createElement('script');     script.type=" ...

  5. ASP获取当前页面带参数的网址(URL地址)的方法

    '获取当前Url参数的函数 Function GetUrl() Dim ScriptAddress,Servername,qs ScriptAddress = CStr(Request.ServerV ...

  6. procedure的over(partition by ) function

    转载自:http://www.2cto.com/database/201310/249722.html oracle的分析函数over(Partition by...)   Sql代码       o ...

  7. 你所不知道的Html5那些事(一)

    文章简介:       关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后 ...

  8. make fontconfig 时出现No package ‘libxml-2.0′ found的解决方法

    这里显示一个错误信息:checking for LIBXML2… configure: error: Package requirements (libxml-2.0 >= 2.6) were ...

  9. JavaScript高级程序设计(九):基本概念----函数

    一.参数的理解 1.ECMAScript中的参数在内部是用一个数组来表示的.函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以. 2.实质上,函数可以通过arguments对 ...

  10. JSTL 入门

    JSTL--JSP Standard Tag Library--JSP标准标签函式库         当前版本 1.2.5     JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个J ...