0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32F407的FreeRTOS学习笔记(11)

CHANBAEK 来源:实在太懒于是不想取名 作者:电路小白 2023-11-13 17:23 次阅读

在前面的学习中例如信号量、队列中经常会出现提示:在许多情况下,“任务通知”可以提供二进制信号量的轻量级替代方案。

那么本期内容着重于介绍什么是任务通知以及如何使用。

图片

首先我们去FreeRTOS的官网,阅读开发者文档中关于“任务通知”的介绍。

图片

我们可以了解到,任务通知是由一条(或多条)任务"通知状态"以及一个通知值 组成。

任务通知是直接发送给任务的,传递通知值以及改变通知状态。任务通知如同任务一样也可以进入阻塞状态进行等待。

灵活的运用任务通知可以快捷的替代信号量、队列以及事件组等任务间的通讯。

使用任务通知

FreeRTOS中有好几个发送任务通知的函数,我们一一介绍他们的用处以及区别。

图片

首先是xTaskNotify和xTaskNotifyIndexed,它们分别用来发送任务通知和像任务通知数组发送通知(自V10.4.0一条任务可以有多条任务通知)

image.png

参数作用如上,xTaskToNotify是需要通知的任务句柄,uxIndexToNotify在xTaskNotify是没有的,用在任务通知数组中的,ulValue则是我们需要传递的32位通知值,最后eAction是用来确定我们传递通知值的方式。

image.png

除了上述的指定*eAction * 以外还有一些发送任务通知的函数。

图片

例如xTaskNotifyGive,可以用来替代二进制信号量使用,也等效于eAction设置为eIncrement,通知值自增1。

图片

任务通知函数还有好几个函数,在此不一一介绍,感兴趣的观众可以去FreeRTOS的官网查看文档手册。·

下面我们来看一下等待任务通知的函数。

图片

image.png

测试代码

测试代码非常简单,我们定义一个轮询按钮按下的函数,如果按钮按下,我们就用任务通知向我们的任务函数发送一个通知值。任务函数则一直等待任务值,如果收到通知,就打印通知值。、

void Mid_Task(void * pvParameters)//发送任务通知函数
{
  int i = 0; 
  while(1)
  {
    if(KEY_Scan(0)==1)
    {
      printf("Key_Pressrn");
      xTaskNotify( (TaskHandle_t) High_Handler,//任务函数的句柄
                   (uint32_t) i,//通知值
                   (eNotifyAction) eSetValueWithOverwrite );//用覆盖的方式传递
      i++;  
    }
  }
    vTaskDelay(10);
}


void High_Task(void * pvParameters)//接收任务通知函数
{
  uint32_t NotifyNumber;//存放任务通知值
  BaseType_t err;
  while(1)
  {
    err = xTaskNotifyWait( (uint32_t) 0,//不清除位
                           (uint32_t) 0,//不清除位
                           (uint32_t * ) &NotifyNumber, 
                           (TickType_t) 10 );//等待10
    if(err == pdTRUE)
    {
      printf("Recieve Notify is : %drn",NotifyNumber);
    }
    vTaskDelay(10);
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41250
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8257
收藏 人收藏

    评论

    相关推荐

    基于STM32F407FreeRTOS学习笔记(9)

    在嵌入式编程中,定时器是一个非常重要且强大的功能,用来帮我们定时性的调用中断服务函数来帮助我们处理程序。定时器通常是用硬件来实现的,例如STM32F407就有8个硬件定时器。
    的头像 发表于 11-08 11:08 416次阅读
    基于<b class='flag-5'>STM32F407</b>的<b class='flag-5'>FreeRTOS</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(9)

    stm32f407

    请问学习stm32f407哪个视频教程比较好?
    发表于 04-03 19:06

    STM32F407时钟配置学习

    STM32F407时钟配置学习
    发表于 08-04 07:14

    FreeRTOS移植到STM32F407

    FreeRTOS,接下来我们就把FreeRTOS移植到我们所使用的平台上,我们使用的板子是STM32F407。02. 预备工作要移植FreeRTOS,肯定需要一个基础工程,基础工程越
    发表于 08-24 06:07

    如何使用STM32F407去移植FreeRTOS

    如何使用STM32F407去移植FreeRTOS呢?有哪些操作步骤?
    发表于 10-21 09:45

    STM32F407 FreeRTOS开发指南

    参考资料:正点原子《littleVGL 开发指南》正点原子《STM32F407 FreeRTOS 开发指南》硬件平台:stm32f407开发板(或最小系统)、4.3寸TFTLCD以正点原子的例程为
    发表于 01-05 06:55

    STM32F407标准库学习

    STM32F407标准库学习笔记-AFIO- 头文件 gpio.h#define GPIO_PinSource0((uint8_t)0x00)#define GPIO_PinSource1
    发表于 01-24 06:42

    STM32F407模板

    STM32F407模板,感兴趣可以看看。
    发表于 07-25 18:52 125次下载

    STM32F407 UCOS III实验

    STM32F407 UCOS III实验,介绍基于STM32F407的UCOSIII实例,参考下
    发表于 09-22 14:08 80次下载

    STM32F407标准库学习笔记-RCC

    STM32F407标准库学习笔记-RCC- rcc.htypedef struct{ uint32_t SYSCLK_Frequency; /*!< SYSCLK clock
    发表于 11-29 15:51 13次下载
    <b class='flag-5'>STM32F407</b>标准库<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>-RCC

    STM32F407标准库学习笔记-GPIO

    STM32F407标准库学习笔记-GPIO头文件 gpio.h枚举-列举同一寄存器的不同选项typedef enum{ GPIO_Low_Speed = 0x00, /*!<
    发表于 11-29 15:51 46次下载
    <b class='flag-5'>STM32F407</b>标准库<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>-GPIO

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作
    发表于 12-04 13:36 73次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第1章   初学<b class='flag-5'>STM32F407</b>的准备工作

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder
    发表于 12-04 14:21 17次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第8章 <b class='flag-5'>STM32F407</b>的终极调试组件Event Recorder

    stm32f407原理图

    stm32f407原理图
    发表于 07-14 16:07 168次下载

    STM32F407 FreeRTOS开发手册 V1.1

    STM32F407 FreeRTOS开发手册_V1.1PDF文件下载。
    发表于 07-31 11:16 44次下载