推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

实验71_任务通知_中断中高效通知任务.docx

更新时间:2026-09-13 12:04:14 大小:38K 上传用户:烟雨查看TA发布的资源 标签:FreeRTOSTask NotificationISRvTaskNotifyGiveFromISRInterrupt Handling 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

实验 71:任务通知 — 中断中高效通知任务

实验说明

实验概述

在中断服务程序(ISR)中唤醒任务的最快方式是使用任务通知。vTaskNotifyGiveFromISR() 比 xSemaphoreGiveFromISR() 快约 45%,且不需要创建信号量对象,节省内存。本实验演示在 ISR 中使用任务通知高效唤醒处理任务。

实验原理

vTaskNotifyGiveFromISR() 直接操作目标任务的 TCB 中的通知值字段,递增其值。如果目标任务正在等待通知(阻塞在 ulTaskNotifyTake() 上),它会立即被唤醒。pxHigherPriorityTaskWoken 参数用于指示是否需要在 ISR 结束后进行任务切换。

实验现象

模拟定时器中断每 500ms 触发一次,ISR 中使用任务通知唤醒处理任务,处理任务进行数据采集和处理。

完整代码

  c
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>

TaskHandle_t xProcessTaskHandle = NULL;
volatile uint32_t g_IsrTriggerCount = 0;
volatile uint32_t g_ProcessedCount = 0;

/* 模拟 ISR 处理函数 */
void SimulateISR(void)
{
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;

    g_IsrTriggerCount++;

    /* 使用任务通知唤醒处理任务 */
    vTaskNotifyGiveFromISR(xProcessTaskHandle, &xHigherPriorityTaskWoken);


部分文件列表

文件名 大小
实验71_任务通知_中断中高效通知任务.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载