UCOSIII任务挂起和恢复

摘要:
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时恢复执行了。

免责声明:文章转载自《UCOSIII任务挂起和恢复》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jsp弹出新窗口代码LeetCode--045--跳跃游戏II(java)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CSS-顶部滚动进度条

Documentbody{background-image:linear-gradient(torighttop,#f0050%,#ece50%);background-repeat:no-repeat;height:300vh;position:relative;background-size:100%calc(100%-100vh+5px);}body:...

如何在jenkins上新建一个项目及其简单配置

单击[新建]进入选择页面,您可以在此页面上配置项目(包括拉取源代码、修改连续构建时间以及在打包和部署之前修改配置文件)3。在General中,您可以设置要构建的版本,如下图5所示。在源代码管理模块中,您可以设置源代码地址(我们公司常用的Git)6。如果是自动构建,您可以将自动构建时间(即构建频率)设置为7。以下是构建中的一些设置。您可以使用shell修改源代...

iTerm2 配色方案(转)

ITerm2配色方案(噢,我的zsh&Powerline)item2.png转到官方网站下载ITerm2,并以全黑色背景打开它。屏幕截图2017-08-01下午5.45.28点。Pngsolarized可以说是目前网络上最流行的配色方案,我个人认为比较这种配色更好。第一种方法:打开iTerm2首选项、配置文件/颜色,然后直接选择Solariz...

MySQL学习笔记:字符串前后补全0

遇到一个要求:如果位数小于6,则需要使用函数LPAD()和RPAD()自动完成6位。LPAD使用字符串padstr填充并完成左侧的str,直到其长度达到len个字符,并返回str。...

可爱猫+python——定制化微信机器人

框架是模拟真实用户操作,只要不违法乱纪,是不用担心账号冻结问题的。...

svn文件冲突,树冲突详解

文件冲突当两名或更多开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。在此案例中,使用冲突编辑对话框中的删除按钮进行清理并将冲突标记为已解决。Foo.c被标记为删除并且产生一个树冲...