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. post与get方法的区别

    1. GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是unicode,即是说所有的非ASCII字符都要编码之 ...

  2. 那些年我们经历的BT面试题

    初入职场面试的我到处碰壁,以下是我个人对几道面试题的小总结: 1.一列数字的规则如下:1,1,2,3,5,8,13,21, 34........ 求第30位数字是多少,用递规和非递归两种方法算法实现. ...

  3. 测开之路一百三十九:会话管理之cookie写入、读取、和更新

    机制:服务器端发送的小段文本信息存储在客户端硬盘 功能:记录用户偏好,请求.页面.站点间共享信息 特点:易丢失.安全隐患 添加cookie,需要用到make_respons.set_cookie @a ...

  4. 操作系统 - Linux操作系统 - Centos - Centos6.5 - 安装|命令|使用汇总

    快捷键 打开终端 右键 —>open terminal 网络配置 配置文件修改 - ONBOOT=no 修改为 ONBOOT=yes 工具 - gcc 安装 yum -y install gcc ...

  5. 社工 - By浏览器 - Google搜索技巧 - 汇总

    google基本语法 Index of: 使用它可以直接进入网站首页下的所有文件和文件夹中 intext: 将返回所有在网页正文部分包含关键词的网页 intitle: 将返回所有网页标题中包含关键词的 ...

  6. 【Windows Server存储】MBR和GPT分区表

    MBR和GPT分区表 分区表用于引导操作系统 master boot record(MBR)于1983年首次在PC上推出 最大4个主分区 2太空间 GUID Partition Table(GPT), ...

  7. Flask(六)—— 自定义session

    Flask(六)—— 自定义session import uuid import json from flask.sessions import SessionInterface from flask ...

  8. 【烦人的字符集】linux字符集问题,中文乱码

    [1]快速修改命令 [2]locale 查看现在服务器的字符 [root@Master ~]# localeLANG=en_US.UTF-8LC_CTYPE="zh_CN.UTF-8&quo ...

  9. eclipse中经常用到的修改菜单项

    1.编写java程序时,书写一个类之后,要调用此类的某个方法时,点个点,此类的所有方法都会自动出现,然后再选择需要的那个方法即可: 2.鼠标放在一个类上面,关于此类的相关描述就会自动加载出来,要修改的 ...

  10. bits,Bytes,KB,MB,GB和TB之间的换算关系

    1Bytes=8bits(1字节等于8位) 1KB=1024Bytes(1KB等于1024字节) 1MB=1024KB 1GB=1024MB 1TB=1024GB 为啥带宽100M而下载大概只是12. ...