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. 无法加载程序集XXX.dll 此程序集可能是从 Web 上下载的

    错误    13    无法加载程序集 file:///D:\Documents\Downloads\kaxaml-master\kaxaml-master\packages\Prism.4.0.0. ...

  2. RaspberryPI 3b 技术总结(包括Linux)

    安装系统,无屏幕,无网线,windows下 第一步当然是把ROM(官方系统)和刷写工具备好,TF卡一张,当然必须有读卡设备. 启动Etcher,将ROM刷入TF卡,这需要挺长一段时间,完毕后将会出现四 ...

  3. ssm项目dao层方法异常:org.apache.ibatis.binding.BindingException: Invalid bound statement

    在IntelliJ IDEA中用ssm框架搭建了一个demo项目,在执行到dao层方法时抛出这个异常: org.apache.ibatis.binding.BindingException: Inva ...

  4. Object.freeze与 Object.seal的区别

    Object.freeze()冻结一个对象.不能添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性,以及不能修改已有属性的值.冻结一个对象后该对象的原型也不能被修改. ...

  5. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_3 Mybatis中编写dao实现类的使用-修改删除等其他操作

    update和上面的Insert代码基本是一样的,只需要修改这里, 测试Update的方法 删除 findById 测试方法 findByName 测试方法 findTotal

  6. for循环、列表的切片、元组

    一.遍历整个列表 使用for语句循环将列表每取出一个变量,然后存储在中间变量中,打印中间变量:循环取出: 1.简单for循环 示例: carssa = ['richan','fengtian','be ...

  7. Vim常用的功能命令

    一.编辑 查看行号     :set nu 删除一整行   dd 删除1到10行     :1,10d 删除所有内容     dG 当前行下插入一空行   o 撤销改动    u 查看当前行信息    ...

  8. 转:mysql datetime类型精确到毫秒、微秒的问题

    原文地址:mysql datetime类型精确到毫秒.微秒的问题 mysql里面的datetime类型的精确度是可以到1/ 10 ^ 6 秒的某些客户端(如navicat for mysql)的显示经 ...

  9. getchar返回int类型

    #include <stdio.h> /* copy input to output; 2nd version */main(){int c;c = getchar();while(c ! ...

  10. c语言中不允许在函数外部给全局变量赋值

    今天,在写条件编译的时候,出现了在函数外部给全局变量赋值的情况,gcc报错,那么c语言为什么不允许在函数外部给变量赋值呢?为什么声明变量的时候可以对变量进行赋值? 出错代码: /* 2 * ===== ...