FreeRTOS 任务挂起和恢复
在使用RTOS的时候一个实时应用可以作为一个独立的任务。每个任务都有自己的运行环境, 不依赖于系统中其他的任务或者RTOS调度器。 任何一个时间点只能有一个任务运行,具体运行哪个任务是由RTOS调度器来决定的, RTOS调度器因此就会重复的开启、关闭每个任务
任务状态
运行态
当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在
使用处理器的任务
就绪态
可以运行的任务。有一个同优先级或者更高优先级的任务正在运行
阻塞态
一个任务当前正在等待某个外部事件
挂起态
进入挂起态以后也不能被调度器调用。任务进入和退出挂起态通过调用函数vTaskSuspend()和xTaskResume()
任务状态转换
任务创建
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //函数指针
const char * const pcName,
const uint16_t usStackDepth, //堆栈大小
void * const pvParameters, //给任务传递参数
UBaseType_t uxPriority, //任务的优先级
TaskHandle_t * const pxCreatedTask /*任务句柄*/) PRIVILEGED_FUNCTION;
pxTaskCode:任务函数
pcName:任务名字
usStackDepth:任务堆栈大小
pvParameters:传递给任务函数的参数
uxPriority:任务优先级
pxCreatedTask:任务句柄
TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
const char * const pcName,
const uint32_t ulStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
StackType_t * const puxStackBuffer,
StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION;
puxStackBuffer:任务堆栈。一般为数组
pxTaskBuffer:任务控制块
任务删除
void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;
xTaskToDelete:任务句柄
挂起任务
void vTaskSuspend( TaskHandle_t xTaskToSuspend )
恢复任务
void vTaskResume( TaskHandle_t xTaskToResume )
中断服务函数中恢复任务运行
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )
举例
TaskHandle_t pxCreatedTask;
void TIM4_IRQHandler()
{
if(TIM_GetITStatus(TIM4, TIM_IT_Update) == 1)
{
xTaskResumeFromISR(pxCreatedTask); //中断服务函数中恢复任务运行
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
}
void key()
{
static u8 flag = 1;
if(flag == 1 && key_up == 1)
{
vTaskDelay(10);
if(key_up == 1)
{
flag = 0;
vTaskSuspend(pxCreatedTask); //挂起任务
}
}
else if(key_up == 0)
{
vTaskDelay(10);
if(key_up == 0)
{
flag = 1;
}
}
}
void vTask_key(void *t)
{
while(1)
{
key();
}
}
int main(void)
{
TIM4_init(10000, 36000-1); //初始化定时器(详见定时器章节)
xTaskCreate(vTask, "vTask", 50, NULL, 1, &pxCreatedTask);
xTaskCreate(vTask_key, "vTask_key", 50, NULL, 2, NULL);
vTaskStartScheduler();
}
实验现象:当按键按下,挂起任务。当定时器中断产生,恢复任务运行
FreeRTOS 任务挂起和恢复的更多相关文章
- 自定义任务状态来操作FreeRTOS任务的挂起,恢复,删除
osThreadState osState2;//自定义一个线程的状态 osThreadState 系统枚举定义如下: typedef enum { osThreadRunning = 0x0, /* ...
- FreeRTOS-02任务挂起和恢复
根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务挂起和恢复API函数: 工程列表: 1. main.c /**/ #include ...
- java并发编程(三)线程挂起,恢复和终止的正确方法
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...
- MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess
http://hi.baidu.com/xbbsh/blog/item/b73d3125462201084c088db1.html ---------------------------------- ...
- Windows 8 应用开发 - 挂起与恢复
原文:Windows 8 应用开发 - 挂起与恢复 Windows 8 应用通常涉及到两种数据类型:应用数据与会话数据.在上一篇提到的本地数据存储就是应用层面的数据,包括应用参数设置.用户重 ...
- 转: 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用 ...
- Java知多少(65)线程的挂起、恢复和终止
有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...
- VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案
在网上看说在服务里面启动 但也是不能用 电脑上说是WINDOWS无法启动VMware Authorization Service服务(位于本地计算机上)错误:1068 依赖服务或组无法启动 这个很简单 ...
- linux进程的挂起和恢复
进程的挂起及恢复 #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前台执行:用bg命令将挂起的作业放到后台 ...
随机推荐
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- 【Java】Junit快速入门
Junit介绍 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUnit ...
- 【Git】 Git安装及配置
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台. 本例使用环境:Linux环境(CentOS 7.4 ...
- Spring Cloud 如何实现服务间的调用 4.2.3
如果存在多个服务时,要怎么通过注册中心来实现服务之间的调用呢?接下来将通过一个用户和订单之间的调用案例,来演示Eureka Server中服务之间的调用. 搭建订单服务工程 在父工程xcservi ...
- [ kvm ] 学习笔记 8:Ovirt 基础及使用
目录- 1. oVirt 功能介绍- 2. oVirt 安装部署 - 2.1 基础准备 - 2.2 安装 ovirt-engine - 2.3 配置 kvm 主机 - 2.4 ...
- require.js的基本用法
一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...
- Js把对象数组列表转换成数组
今天写组件的时候遇到一个问题,就是当我需要对获取到的对象列表进行删减的时候,发现没有合适的方法,比如: //获取图片列表 var imgs = document.getElementsByTagNam ...
- 【ARTS】01_43_左耳听风-201900902~201900908
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- DevOps - DevOps精要 - 歧途
前言 如果在实施DevOps的过程中,周围没有一个人支持你,也没有得到领导和团队成员的理解: 如果在采用DevOps的工具和方法之后,难以获得明显的效率提升,甚至得到了不少的消极反馈: 那就需要反省一 ...
- consul(一)什么是consul
1. consul的基本介绍 在分布式架构中,服务治理是一个重要的问题.在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极 ...