zoukankan      html  css  js  c++  java
  • UCOSIII任务挂起和恢复

    UCOSIII任务挂起和恢复

      有时候在某个时间段内我们不需要某个任务继续运行,这时,我们可以将它挂起,但是,过了这个时间段后又需要它继续运行,这时,我们可以将它恢复;

      小理解点:理论上不需要时将任务删除,需要时再重新创建,这样也行,但是太麻烦。。。。

      UCOSIII任务挂起函数:

      void OSTaskSuspend (OS_TCB *p_tcb,OS_ERR *p_err);

      参数一 “*p_tcb”:被挂起任务的任务控制块;

      参数二 “*p_err”:错误码,不同错误码有不同的含义,具体见UCOSIII源代码中这个函数原型那里,那里有详细注释;

      函数原型所在位置:UCOSIII源码中,“os_task.c”的大概第1737行;

      小知识点:空闲任务不能挂起,如果试图挂起一个空闲任务,这个函数返回值会为:“OS_ERR_TASK_SUSPEND_INT_HANDLER”,这一点在上面说的函数原型所在位置中关于函数返回值的说明那里有详细说明;再有,....同上....,系统任务也不能挂起,比如系统中断服务任务也不能挂起;

      UCOSIII任务恢复函数:

      void OSTaskResume(OS_TCB *p_tcb,OS_ERR *p_err);

      参数一:“*p_tcb”:被挂起任务的任务控制块

      参数二:“*p_err”:错误码,.........同上.........同上...........

      函数原型所在位置:UCOSIII源码中,“os_task.c”的大概第1175行;

      小知识点:基本同上........同上.........同上.......同上.........没事多看看源码就知道了

      例程:这个例程和前面那篇《UCOSIII任务创建》中的例程基本一样,下面给出不一样的地方:

     1 //"Led0_task"任务:
     2 void Led0_task(void *p_arg)
     3 {
     4     OS_ERR err;
     5     static char i=0;
     6     p_arg = p_arg;          //故意使用一下这个参数,否则编译器会警告说此参数没有使用
     7     while(1)
     8     {
     9         LED0=~LED0;
    10         OSTimeDlyHMSM(0,0,0,300,OS_OPT_TIME_HMSM_STRICT,&err);
    11         i++;
    12         if(i==15)//上面定义了一个静态变量,当i加到15就将“Led1_task”任务挂起
    13         {
    14             OSTaskSuspend((OS_TCB*)&Led1TaskTCB,&err);//任务挂起函数
    15             printf("挂起了"Led1_task"任务
    ");
    16         }
    17         if(i==25)//当i加到25,再将“Led1_task”任务恢复,这样,任务的挂起和恢复就测试完了
    18         {
    19             OSTaskResume((OS_TCB*)&Led1TaskTCB,&err);//任务恢复函数
    20             printf("恢复了"Led1_task"任务
    ");
    21         }
    22     }
    23 }

      在上边我们可以看出,任务的挂起和恢复就是在“Led0_task”这个任务中完成的,通过定义一个变量“i”,任务一每次将“i”加1,在 i 等于15和25处分别将“Led1_task”任务挂起和恢复,那么任务现象自然就是,“Led1_task”任务本来是正常执行的,当“i”等于15时,暂停执行了,当“i”等于25时恢复执行了。

      

  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/data-base-of-ssy/p/6478276.html
Copyright © 2011-2022 走看看