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=

随便看看

uniApp之 顶部选项卡

为了在uniapp插件中创建类似于信息应用程序模板的功能,使用了官方的组件刷。起初,它无法滚动。后来,我看了一下官方网站,说有必要添加“滚动视图”标签,以记录第一次使用uniapp的应用程序。首先,在顶部制作一个选项卡,因为我只有两个项目,所以我将它们直接写入视图标记中{item.label}}然后编写以下内容。单击和滑动可以切换选项卡,所选样式:curre...

CAS单点登录------未认证授权服务

问题背景:之前我使用的127.0.0.1进行CAS直接url进行过滤!后来我用nginx进行反向代理出现问题:如下图第一眼,就在内心想,草这什么鬼!调试了五分钟发现还是不行!  网上各种教程!  半小时过去了!我吧配置文件自己看看!    出现这样问题:原因是CAS 的服务认真之前先有个REgx的正则判断,目录如上看这个正则时候,我瞬间明白了,我下面这个问题...

Redis设置Auth认证保护

Redis有一种保护数据安全的身份验证方法。有两种方法可以设置此身份验证。一个是通过配置文件。另一种是直接在Redis客户端命令中设置参数requirepas。首先是在配置文件中查找参数requirepass。这是配置Redis访问密码的参数。由于Redis具有很强的并发能力,并且只使用密码,攻击者可能会在短时间内发送大量密码猜测请求,这很容易被暴力破解。因...

vue+jspdf+html2canvas导出PDF文件

没有废话。首先,查看最终打印结果。我说最后打印的pdf文件看起来像这样。pdf文件的分页是通过设置jspdf实现的,但我暂时无法对文件内容进行分页。因为我们首先将需要打印的元素转换为画布,然后将画布转换为图像,然后将图像转换为pdf文件。...

nginx重启

方法二:在启动命令-c前加-t2、重启Nginx服务方法一:进入nginx可执行目录sbin下,输入命令./nginx-sreload即可方法二:查找当前nginx进程号,然后输入命令:kill-HUP进程号实现重启nginx服务...

为什么运行CMD后,一闪就不见了 解决方案

方法1:如果您中毒,系统中的一个进程正在监视您的命令。如果您看到CMD,可以关闭它。您可以检查任务管理中是否有流程。如果你关闭它,你应该可以打开它。如果没有,则说明已注入系统进程。很难杀死病毒。方法2:注册表:HKEY_LOCAL__清除MACHINE Software Microsoft CommandProcessor AutoRun中的值,即删除带有d...