• stm32cubemx hal学习记录:FreeRTOS任务管理


    一、任务通知

    1、FreeRTOS从V8.2.0版本开始提供任务通知功能,每个任务都有一个32位的通知值,在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件组,也可以代替长度为1的队列。

    2、相较于以前使用FreeRTOS内核通信的资源,必须创建队列、二值信号量、计数信号量或者事件组的情况,使用任务通知更加灵活。

    3、但是只有一个任务接收通知,因为必须指定接收通知的任务。且只有等待通知的任务可以被阻塞,发送通知的任务在任何情况下都不会因为发送失败而进入阻塞态。

    二、参数配置

    1、配置RCC、USART1、时钟84M

    2、配置SYS,将Timebase Source修改为除滴答定时器外的其他定时器。

    3、初始化LED的两个引脚、两个按键引脚

    4、开启FreeRTOS,v1与v2版本不同,一般选用v1即可

    5、打开以下功能,系统默认打开

    6、创建三个线程,两个接收,一个发送

     三、API

    1、向指定的任务发送一个任务通知:osSignalSet

    2、等待任务通知:osSignalWait

    四、代码解释

    ①发送

    1. #define KEY1_EVENT (0x01<<0)
    2. #define KEY2_EVENT (0x01<<1)
    3. void Send_thread_entry(void const * argument)
    4. {
    5. for(;;)
    6. {
    7. if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8)==0)
    8. {
    9. printf("key1 down!\n");
    10. osSignalSet(Receive1_stackHandle,KEY1_EVENT);
    11. }
    12. if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==0)
    13. {
    14. printf("key2 down!\n");
    15. osSignalSet(Receive2_stackHandle,KEY2_EVENT);
    16. }
    17. osDelay(1000);
    18. }
    19. }

    ②接收1

    1. void Receive1_thread_entry(void const * argument)
    2. {
    3. for(;;)
    4. {
    5. osEvent event=osSignalWait(KEY1_EVENT,osWaitForever);
    6. if(event.status==osEventSignal)
    7. {
    8. if(event.value.signals & KEY1_EVENT)
    9. {
    10. printf("receive1 task\n");
    11. }
    12. }
    13. }
    14. }

    ③接收2

    1. void Receive2_thread_entry(void const * argument)
    2. {
    3. for(;;)
    4. {
    5. osEvent event=osSignalWait(KEY2_EVENT,osWaitForever);
    6. if(event.status==osEventSignal)
    7. {
    8. if(event.value.signals & KEY2_EVENT)
    9. {
    10. printf("receive1 task\n");
    11. }
    12. }
    13. }
    14. }

  • 相关阅读:
    MySQL的内外连接
    Java中有序单链表的构建
    分享一个在线免费制作和视频合成gif的网站
    【接口自动化测试】HTTP协议详解
    5月13号作业
    logrotate日志轮转
    EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成
    【如何将任何直流电机变成伺服电机】
    Android通知Notification使用全解析,看这篇就够了
    [word] 如何在word中插入地图? #学习方法#其他
  • 原文地址:https://blog.csdn.net/ohhjack/article/details/127999606