当前位置: 首页 > news >正文

FreeRTOS:1、任务通知vTaskNotifyGiveFromISR保证实时性

文章目录

  • 背景
  • 解释
  • 意义

背景

  • 首先,我们看以下代码:
#include "FreeRTOS.h"
#include "task.h"TaskHandle_t s_task_handle = NULL;void vTaskFunction(void *pvParameters) {for (;;) {// 等待通知ulTaskNotifyTake(pdTRUE, portMAX_DELAY);// 处理通知// ...}
}void vISRHandler(void) {BaseType_t mustYield = pdFALSE;// 通知任务vTaskNotifyGiveFromISR(s_task_handle, &mustYield);// 如果必须进行上下文切换,调用 portYIELD_FROM_ISR 宏portYIELD_FROM_ISR(mustYield);
}int main(void) {// 创建任务xTaskCreate(vTaskFunction, "Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &s_task_handle);// 启动调度器vTaskStartScheduler();// 程序不会运行到这里for (;;);
}

解释

  • 其中,vTaskNotifyGiveFromISR 是 FreeRTOS 提供的一个函数,用于在中断服务例程(ISR)中通知一个任务。在 FreeRTOS 中,任务之间的同步和通信可以通过各种机制实现,其中包括通知(Notification)。
vTaskNotifyGiveFromISR(s_task_handle, &mustYield);
  • 这个函数调用有两个参数:
    1.s_task_handle: 要通知的任务的句柄。
    2.&mustYield: 指向一个布尔变量的指针,用于指示被通知的任务是否高于当前的任务,如果比当前任务高,那么退出中断后就需要立即进行任务切换以保证实时性。如果当前任务比被通知的任务优先级高,则不需要进行任务切换。
  • 然后:portYIELD_FROM_ISR是发起中断切换请求的。
// 如果必须进行上下文切换,调用 portYIELD_FROM_ISR 宏
portYIELD_FROM_ISR(mustYield);

意义

  • 这里我们讲了FreeRTOS中任务通知vTaskNotifyGiveFromISR的用法。
  • 由于FreeRTOS是高实时性的系统,因此我们可以看到,在中断退出时,为了保证被通知的任务及时运行,因此需要检查是否需要立即进行任务切换。如果被通知的任务没有更高的优先级,那么在退出中断后不会立即进行任务切换。FreeRTOS 设计的一个关键点就是只在有必要的时候进行任务切换,以保持系统的效率和响应性。
  • portYIELD_FROM_ISR的作用是从ISR中请求一次上下文切换。具体来说,如果中断服务例程导致了一个高优先级任务变得可运行,这个宏可以确保在中断退出时,立刻切换到那个任务,而不是继续运行当前的任务。
http://www.lryc.cn/news/378123.html

相关文章:

  • 监督学习:从数据中学习预测模型的艺术与科学
  • 深入理解Java虚拟机(JVM)中的垃圾回收器
  • 视频集市新增支持多格式流媒体拉流预览
  • 定时器-前端使用定时器3s轮询状态接口,2min为接口超时
  • python实践笔记(二): 类和对象
  • 指定GPU跑模型
  • Windows桌面运维----第五天
  • bash和dash的区别(及示例)
  • Java基础入门day65
  • 解密制度的规定和解密工作的具体流程
  • 实际中常用的网络相关命令
  • 机器学习补充
  • 机器学习——RNN、LSTM
  • Java项目学习(员工管理)
  • 视觉SLAM14精讲——相机与图像3.3
  • 【路径规划】基于粒子群结合遗传算法实现机器人栅格地图路径规划
  • 内容安全复习 9 - 身份认证系统攻击与防御
  • Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建
  • 大数据开发语言Scala入门 ,如何入门?
  • 【人机交互 复习】第1章 人机交互概述
  • HCIP-HarmonyOS Device Developer 课程大纲
  • 蓝桥杯 经典算法题 查找两个总和为特定值的索引
  • Java | Leetcode Java题解之第169题多数元素
  • 十大机器学习算法深入浅出
  • 【论文笔记】Parameter-Effificient Transfer Learning for NLP
  • Qt异常处理
  • 【ElasticSearch】ElasticSearch实战
  • 48-3 内网渗透 - 令牌操纵
  • 架构师之 Kafka 核心概念入门
  • Redis通用命令详解