FreeRTOS 任务挂起和恢复
来源:互联网 发布:馆陶县行知教育集团 编辑:程序博客网 时间:2024/06/07 00:53
在使用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(); }
实验现象:
当按键按下,挂起任务。当定时器中断产生,恢复任务运行
阅读全文
1 0
- FreeRTOS 任务挂起和恢复
- freeRTOS 任务挂起和恢复
- FreeRTOS之任务挂起和恢复函数
- FreeRTOS学习1--任务挂起与恢复
- 任务挂起和恢复
- 任务的创建、挂起和恢复
- uC /OS-II中任务的挂起和恢复
- UC/OS基础知识之任务的挂起和恢复
- UCOSII任务挂起,删除,恢复
- 线程恢复和挂起
- 挂起和恢复线程
- 任务挂起和中断
- ucos 任务的挂起与恢复
- FreeRTOS动态创建任务和删除任务
- 挂起和恢复一个进程
- 线程的挂起和恢复
- VB 挂起和恢复进程
- C 挂起和恢复进程
- C++数据结构实验报告:顺序表实现
- 1203:单词分割
- 记录json解析
- 表单标签
- Divide and Conquer -- Leetcode problem53. Maximum Subarray
- FreeRTOS 任务挂起和恢复
- 郵便実装
- 微服务架构特点
- MySQL备份之mysqldump工具--lock-all-tables
- ThinkPHP CURD之登录
- MATLAB 判断字符串中是否含有特定的字符
- Attention and Augmented Recurrent Neural Networks
- computed 计算属性无法双向绑定
- MySQL横表和纵表的相互转换