3.FreeRTOS学习笔记-任务
任务
- FreeRTOS 中的任务是抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。
- 不在运行的任务必须删除,否则将产生hardfault错误
- 同时 FreeRTOS 也支持时间片轮转调度方式,只不过时间片的调度是不允许抢占任务的 CPU 使用权。
- 除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外系统的其他部分都是可以抢占的
- 0 为最低优先级,分配给空闲任务使用,一般不建议用户来使用这个优先级,一般设置32个优先级
- FreeRTOS 内核中也允许创建相同优先级的任务。相同优先级的任务采用时间片轮转方式进行调度(也就是通常说的分时调度器),时间片轮转调度仅在当前系统中无更高优先级就绪任务存在的情况下才有效
任务状态
- 阻塞状态(Blocked)
- 暂停状态(Suspended)
- 就绪状态(Ready)
在阻塞状态的任务,它可以等待两种类型的事件,第一类是时间相关的时间,第二类是同步类事件
同步类事件有
- 消息队列
- 二值信号量
- 计数信号量
- 互斥量
- 递归互斥量
- 事件组
- 任务通知
1. 任务相关函数
1.1 任务挂起函数
- 被挂起的任务绝不会得到 CPU 的使用权,不管该任务具有什么优先级
void vTaskSuspend( TaskHandle_t xTaskToSuspend )
1.2 挂起所有任务=挂起调度器
实质就是挂起调度器
void vTaskSuspendAll( void )
1.3 任务恢复函数
让任务进入就绪态
void vTaskResume( TaskHandle_t xTaskToResume )
中断函数专用–中断版
xTaskResumeFromISR()不能用于任务和中断间的同步
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )
启动恢复调度器
BaseType_t xTaskResumeAll( void )
动态任务创建
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务函数入口const char * const pcName, //任务名称const configSTACK_DEPTH_TYPE usStackDepth,//栈的大小void * const pvParameters, //给任务传递的参数UBaseType_t uxPriority, //任务优先级TaskHandle_t * const pxCreatedTask ) //任务控制块
返回值
成功: pdPASS;
失败: errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY(失败原因只有内存不足)
FreeRTOS 内部宏 | 定义 |
---|---|
pdFALSE | ( ( BaseType_t ) 0 ) |
pdTRUE | ( ( BaseType_t ) 1 ) |
pdPASS | pdTRUE |
pdFAIL | pdFALSE |
删除任务
void vTaskDelete( TaskHandle_t xTaskToDelete )//创建任务时返回的任务句柄
任务延时
单位为系统节拍周期
void vTaskDelay( const TickType_t xTicksToDelay )
绝对延时函数 vTaskDelayUntil()
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime,//指向一个变量,该变量保存任务最后一次解除阻塞的的时 刻。第一次使用时,该变量必须初始化为当前时间,之后这个变量会在 vTaskDelayUntil()函数内自动更新const TickType_t xTimeIncrement );//周 期 循 环 时 间 。 当 时 间 等 于 (*pxPreviousWakeTime + xTimeIncrement)时,任务解除阻塞
开启任务调度器
开始调度器后,该函数是不会返回的;
void vTaskStartScheduler( void )
任务优先级
获取优先级
设置为 NULL 表示获取自己的优先级
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );
设置任务优先级
使 用 参 数 xTask 来 指 定 任 务 , 设 置 为 NULL 表 示 设 置 自 己 的 优 先 级 ;参数 uxNewPriority 表示新的优先级,取值范围是 0~(configMAX_PRIORITIES – 1)。
void vTaskPrioritySet( TaskHandle_t xTask, //任务句柄UBaseType_t uxNewPriority ); //待设置的优先级
空闲任务
必须在FreeRTOSConfig.h 函数内定义 configUSE_IDLE_HOOK
3.FreeRTOS学习笔记-任务相关推荐
- FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...
- freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...
- freeRtos学习笔记 (8) 任务通知
freeRtos学习笔记 freeRtos任务通知 任务通知的优缺点 freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组 ...
- freeRtos学习笔记 (7)信号量
freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...
- freeRtos学习笔记 (6)软件定时器
freeRtos学习笔记 freeRtos软件定时器 软件定时器需要注意事项 软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用 ...
- freeRtos学习笔记 (5)事件组
freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...
- FreeRTOS学习笔记——互斥型信号量
来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段.下面结合一 ...
- FreeRTOS学习笔记
FreeRTOS学习笔记 (这是我自己学习FreeRTOS整理的笔记,仅供参考) 第一部分:实现FreeRTOS内核 变量名: 定义变量时往往会把变量的类型当作前缀加在变量上 变量类型 前缀 char ...
- 1、野火freertos学习笔记
野火freertos学习笔记 1.任务 1.1 栈 1.2 任务的切换 taskYIELD(); 1.3 临界段 2.空闲任务 3.任务优先级 4.任务延时的表现 5.时间片 5.1抢占式.协做式 6 ...
- 【ESP32+freeRTOS学习笔记-开篇前言】
目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...
最新文章
- linux进行主机发现,linux – 网络上所有计算机的主机名发现
- 拉丁法谚讲习1-24 【ZZ】
- 万物皆可JOJO:这个GAN直接让马斯克不做人啦 | Demo可玩
- 外贸网络推广浅谈蜘蛛抓取频次的原则跟哪些有关?
- [LeetCode]: 169: Majority Element
- Velocity——模板中转换字符串首字母小写解决方案
- 漂浮窗口拖动杂谈(续)
- 牛客网编程练习之编程马拉松:解读密码
- Vue入门 ---- vue-loader 、vue-cli
- 介绍一个基于ASP.NET MVC的框架Catharsis
- 区间选点问题(贪心)
- 远程teamview下载网址,和ie 下载地址
- 今晚与小妹亚美合作了一把qq游戏,大获全胜!
- 使用backdrop-filter部分场景的替代效果
- 5 分钟,使用内网穿透快速实现远程手机桌面!
- 论文阅读笔记:《一种改进的图卷积网络半监督节点分类》
- python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...
- Unity(四十三):存档、文本文件读写
- 计算机连接华为路由器5g变慢,觉得家里网速慢 华为移动路由5GCPEPro3秒一集高清电视剧了解下?...
- 京瓷晶振停产型号一览表
热门文章
- 台式计算机主机组成图,台式电脑主板的各部分组成及详细说明,还有各种连...-卓优商学问答...
- python使用datetime获取两个时间的时间差,与时间的加减运算
- Linux/Ubuntu 单机配置Hbase
- linux六个标准目录,Linux基本目录规范——XDG
- csv导入mysql php实现_PHP实现csv文件导入mysql数据库的方法
- cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】图像金字塔
- matlab数字调音台,软件说明
- html代码大全贴音乐,网页音乐代码大全
- char*,wchar_t*,CString和BSTR之间的转换
- [Swift]LeetCode79. 单词搜索 | Word Search