osThreadState osState2;//自定义一个线程的状态

osThreadState 系统枚举定义如下:
typedef enum {
osThreadRunning = 0x0, /* A thread is querying the state of itself, so must be running. */
osThreadReady = 0x1 , /* The thread being queried is in a read or pending ready list. */
osThreadBlocked = 0x2, /* The thread being queried is in the Blocked state. */
osThreadSuspended = 0x3, /* The thread being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
osThreadDeleted = 0x4, /* The thread being queried has been deleted, but its TCB has not yet been freed. */
osThreadError = 0x7FFFFFFF
} osThreadState; 如果用系统查询任务状态函数查找线程状态
osState2 = osThreadGetState(myTask02Handle);
查询到的状态osState2 = osThreadBlocked等于阻塞的情况很容易出现
在这种情况下来操作线程的创建,删除,挂起,恢复容易导致程序崩溃 osThreadState osState2程序里我们不使用osThreadGetState来查询线程的状态
而是在自己的程序里来赋值,比如创建完任务后osState2 = osThreadRunning;
删除完任务后osState2 = osThreadDeleted;
挂起任务后osState2 = osThreadSuspended;
恢复完任务后osState2 = osThreadRunning;
这样任务的状态始终只有三个状态osThreadDeleted,osThreadSuspended,osThreadRunning。 if(strcmp(ppara1,"任务挂起2") == )//收到挂起的命令
{
if(osState2 == osThreadRunning)//如果任务是运行状态,才会执行挂起动作
{
if(osOK == osThreadSuspend(myTask02Handle))//如果任务挂起成功
{
osState2 = osThreadSuspended;//则改变任务2的状态为挂起
printf("任务2已经挂起\r\n");
}
}
}
else if(strcmp(ppara1,"任务恢复2") == )//收到恢复的命令
{
if(osState2 == osThreadSuspended)//如果任务是挂起状态,才执行任务恢复动作
{
if(osOK ==osThreadResume(myTask02Handle))//如果任务挂起成功
{
osState2 = osThreadRunning;//则改变任务2的状态为运行
printf("任务2已经恢复\r\n");
}
}
}
else if(strcmp(ppara1,"任务删除2") == )//收到删除的命令
{
if(osState2 != osThreadDeleted)//如果任务不是删除状态,才执行任务删除动作
{
if(osOK == osThreadTerminate(myTask02Handle))//如果任务删除成功
{
osState2 = osThreadDeleted;//则改变任务2的状态为删除
printf("任务2已经删除\r\n");
}
}
}
else if(strcmp(ppara1,"任务创建2") == )//收到创建的命令
{
if(osState2 == osThreadDeleted)//如果任务是删除状态,才执行任务创建动作
{
osThreadDef(myTask02, StartTask02, osPriorityIdle, , );
myTask02Handle = osThreadCreate(osThread(myTask02), NULL);//创建任务
osState2 = osThreadRunning;//则改变任务2的状态为运行
printf("任务2已经创建\r\n");
}
}

自定义任务状态来操作FreeRTOS任务的挂起,恢复,删除的更多相关文章

  1. 云监控自定义HTTP状态码说明

    您在使用站点监控时,返回的6XX状态码均为云监控自定义HTTP状态码,具体含义如下表所示: 状态码      含义     备注  610  HTTP连接超时      监测点探测您的网站时出现连接超 ...

  2. 如何在magento后台增加一个自定义订单状态

    magento后台订单状态(order status)只有Pending.Processing.On Hold.Closed.Canceled.Pending Payment 等等,如何在magent ...

  3. 可灵活扩展的自定义Session状态存储驱动

    Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...

  4. fragment、ListFragment使用ListView及自定义Listview等初始化操作

    fragment.ListFragment使用ListView及自定义Listview等初始化操作 1.先说一下 从官方api中说fragment碎片中使用Listview有专门的 ListView碎 ...

  5. VS code配置go语言开发环境之自定义快捷键及其对应操作

    VS code 配置 自定义快捷键 及其对应操作   由于 vs code 的官方 go 插件不支持像 goland 一样运行当前 go 文件, 只能项目 或者 package 级别地运行, 因此有必 ...

  6. 获取浏览器弹窗alert、自定义弹窗以及其操作

    web自动化测试第10步:获取浏览器弹窗alert.自定义弹窗以及其操作 - CSDN博客 http://blog.csdn.net/ccggaag/article/details/76573857 ...

  7. DStream 转换操作------有状态转换操作

    import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} obje ...

  8. Java8 新特性 Stream 无状态中间操作

    无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

  9. ant-design的Table组件自定义空状态

    Table,是antd中一个我们经常使用的组件,在官方文档中给出了非常详细的实例以及API, 但在我们在使用过程中可能需要根据项目的要求来定制空状态时的展示. 什么是空状态呢? 在antd的官方文档中 ...

随机推荐

  1. Django学习之Form表单

    一.Form介绍 普通方式手写注册功能 使用form组件实现注册功能 二.Form那些事儿 1.常用字段与插件 initial error_messages password radioSelect ...

  2. object Object {} any unknown

    object: 除了primitive(boolean null number string undefined bigint symbol)的类型 Object: Object和any很像 ,Obj ...

  3. 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系

    把XMLConfigBuilder的包名补全 这样我们就可以调用里面的loadConfiguration方法了 创建工厂实现类 实现SqlSessionFactory的接口 实现接口里面的方法 把cf ...

  4. Linux centos 解决"不在 sudoers 文件中。此事将被报告"的问题

    第一部分讲解如何从普通用户到root用户 网上看了很多,其实就是执行 su root ,然后输入当前用户密码,这个时候可能报错 这个问题不大,执行一下提示的语句: abrt-auto-reportin ...

  5. 关于win10系统如何调用debug查看CPU汇编指令和内存

    下载安装DOSBox.网上提供下载地址:DOSBOX Debug是DOS(Disk Operating System,磁盘操作系统).windows提供的实模式(8086方式)程序的调试工具.使用它, ...

  6. ugui拖拽

    整理了下以前写的 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE ...

  7. java 内部编译异常的处理方法

    1.可能存在的问题. 在cmd 输入 java -version  和javac -version 检验java的环境是否正常,不正常就卸载重装. 搞定!

  8. 深入理解java:1.3.2 JVM监控与调优

    学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之. 本篇,来看看[ 如何监控和优化GC机制.] 通过学习,我觉得JVM监控与调优,主要在3个着眼点上: 1,如何配置 ...

  9. C++中对象的构造顺序

    1,C++ 中的类可以定义多个对象,那么对象构造顺序是怎样的? 1,很多的 bug 是由对象的构造顺序造成的,虽然它不难: 2,对象的构造往往和构造函数牵涉在一起,构造函数的函数体又可能由非常复杂的程 ...

  10. win10上的Django项目实现内网映射

    网上有很多关于django项目发布uwsgi模块在 windows上的下载以及安装过程, 可是他们也并没有真正的在windows上使用到这个模块(至少目前在网上还没看到过), 而大部分人就是在Djan ...