栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

FreeRTOS学习笔记<任务的理解>

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FreeRTOS学习笔记<任务的理解>

任务特性
  1. 支持抢占、优先级
  2. 每个任务都拥有堆栈
  3. 使用抢占要考虑重入
任务状态
阻塞态:vTaskDelay(),任务在等待队列、信号量、事件组、通知或互斥信号量的时候。有一个超时时间,当超过这个时间,不论等待的事件是否到来,都会退出阻塞态
挂起态:无超时时间

任务优先级

在FreeRTOS中,任务优先级的范围  0~configMAX_PRIORITIES-1。空闲任务优先级默认是0,软件定时器默认是MAX-1,最好不要用这两个优先级

数字越大,优先级越高

默认一个优先级下可以挂多个任务,这些任务使用时间片轮转调度器获取运行时间

任务实现

任务的具体内容,比如一个while(1)循环,里面包括任务的应用程序和延时vTaskDelay。如果要退出while(1)要删除vTaskDelete(NULL)此任务

任务控制块

描述任务属性的数据结构

任务堆栈

任务堆栈用来保存任务现场(CPU寄存器值),创建任务的时候需要指定任务堆栈,任务堆栈的变量类型为StackType_t,再次运行任务时会从上次中断的地方开始运行

任务的创建和删除
xTaskCreate()               //(常用)用动态方法创建一个任务,内存自动创建
xTaskCreateStatic()         //用静态方法创建一个任务,内存需要自己创建内存(空闲任务和软件定时器任务)
xTaskDelete(NULL)           //删除一个任务,NULL为删除自己,删除别人可以用句柄
任务创建删除示例
实现功能:
动态方式创建两个任务,task1和task2
task1:实现led0灯 500ms延时翻转,执行5次后删除task2
task2:实现led1灯 亮100ms,灭900ms
写main函数,执行如下3步

 写task1和task2实现函数

 任务的挂起和恢复
vTaskSuspend()           //挂起一个任务
vTaskResume()            //恢复一个任务的运行
vTaskResumeFromISR()     //中断服务函数中恢复一个任务的运行

任务挂起后堆栈还在,如果删除了任务,对应的堆栈将被释放

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号