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. Android传感器【转】

    本文转载自:http://blog.csdn.net/ffmxnjm/article/details/52101592?locationNum=3&fps=1 传感器的意义 事实上,目前智能手 ...

  2. Base64工具类并发问题!

    为减少对象创建次数,一般会做如下编码: public class EncodeUtils { private static BASE64Encoder encoder; private static ...

  3. MFC ATL STL概要

    MFC-----应用程序框架     ATL-----写COM的利器     STL-----用来写逻辑部分 MFC:   MFC的目标是桌面应用,当然也有网络部分但很不充分.MFC是一套APP   ...

  4. 各种sort排序总结

    冒泡排序 选择排序 插入排序

  5. JS遍历二维数组

    //求平均数 var pjs=[ ['小明',87], ['小红',81], ['小花',97], ['小天',76], ['小张',74], ['小小',94], ['小西',90], ['小武', ...

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

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

  7. JVM监控工具之JProfiler

    一.简介 JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况,线程运行情况(阻塞.等待等),同时可以查找哪个对象占用的内存比较多.哪个对象占用CPU ...

  8. Linux下编译安装Python-3.6.5

    1.下载Python-3.6.5安装包 在Python官网(https://www.python.org/downloads/)下载对应的安装包,选择3.6.5的linux版本,如下图: 2.将安装包 ...

  9. firewalld无法使用解决

    一.安装完Python3.6.5后无法使用firewalld解决 解决:需要把/usr/sbin/firewalld./usr/bin/firewall-cmd 的头部内容改为原来的 pyton2.7 ...

  10. 2 日志系统:一条sql更新语句是如何执行的?

    2 日志系统:一条sql更新语句是如何执行的? 前面了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块,一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后达到e ...