在使用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 任务挂起和恢复的更多相关文章

  1. 自定义任务状态来操作FreeRTOS任务的挂起,恢复,删除

    osThreadState osState2;//自定义一个线程的状态 osThreadState 系统枚举定义如下: typedef enum { osThreadRunning = 0x0, /* ...

  2. FreeRTOS-02任务挂起和恢复

    根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务挂起和恢复API函数: 工程列表: 1. main.c /**/ #include ...

  3. java并发编程(三)线程挂起,恢复和终止的正确方法

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733    下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...

  4. MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess

    http://hi.baidu.com/xbbsh/blog/item/b73d3125462201084c088db1.html ---------------------------------- ...

  5. Windows 8 应用开发 - 挂起与恢复

    原文:Windows 8 应用开发 - 挂起与恢复      Windows 8 应用通常涉及到两种数据类型:应用数据与会话数据.在上一篇提到的本地数据存储就是应用层面的数据,包括应用参数设置.用户重 ...

  6. 转: 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用 ...

  7. Java知多少(65)线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  8. VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案

    在网上看说在服务里面启动 但也是不能用 电脑上说是WINDOWS无法启动VMware Authorization Service服务(位于本地计算机上)错误:1068 依赖服务或组无法启动 这个很简单 ...

  9. linux进程的挂起和恢复

    进程的挂起及恢复 #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前台执行:用bg命令将挂起的作业放到后台 ...

随机推荐

  1. [转]3D渲染管线

    转自:http://tgerm.org/SRP/ 在3D中有两种渲染管线,分别是图形渲染管线和GPU渲染管线. 图形渲染管线 <Render-Time Rendering Third Editi ...

  2. 【JS新手教程】JS中的split()方法,拆分字符串

    该方法具体如代码和图中的注释,直接在语句后面加注释了.格式:要拆分的字符串.split(拆分依据的字符)例如该文中的例子,拆分人名,电话,地址.该文中用了个文本框,文本框中需要输入的格式是:人名,电话 ...

  3. instance与type区别

    class Foo(object): pass class Bar(Foo): pass obj = Bar() # isinstance用于判断,对象是否是指定类的实例 (错误的) # isinst ...

  4. ztree节点名称排序

    // result 为后台返回的集合,在渲染tree前的数据 result = result.sort(function (a, b) { // 判断前面一个是字母,后面一个不是字母,那么不换位置,返 ...

  5. JIRA中的并联审批流程定制

    JIRA号称可以跟踪任何事务,让JIRA的流程来匹配团队的工作流程,而不是让你的团队适应JIRA的工作流程.但是在实践中,有些有些流程用JIRA还是比较困难的,比如并联审批流程,一个并联审批流程需求大 ...

  6. mysql order by rand() 优化方法

    mysql order by rand() 优化方法 适用于领取奖品等项目<pre>mysql> select * from user order by rand() limit 1 ...

  7. lua . 命令收集

    io.popen()## 原型:io.popen ([prog [, mode]]) 解释:在额外的进程中启动程序prog,并返回用于prog的文件句柄.通俗的来说就是使用这个函数可以调用一个命令(程 ...

  8. stl 自定义排序与删除重复元素

    转: STL—vector删除重复元素 STL提供了很多实用的算法,这里主要讲解sort和unique算法. 删除重复元素,首先将vector排序. sort( vecSrc.begin(), vec ...

  9. Zuul【限流】

    在项目中,大部分都会使用到hyrtrix做熔断机制,通过某个预定的阈值来对异常流量进行降级处理,除了做服务降级以外,还可以对服务进行限流,分流,排队等. 当然,zuul也能做到限流策略,最简单的方式就 ...

  10. visio 绘图素材

    1. 前言 visio是个绘图的好工具,可是自带图形元素有限,没有还要自己画. 推荐几个矢量图形素材库,里边有很多图形,很方便的导入到visio中,放大也不失真. 阿里巴巴矢量图库网 stockio ...