野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3554|回复: 5

[freertos] FreeRTOS释放互斥量的方法

[复制链接]
发表于 2020-2-14 17:14:21 | 显示全部楼层 |阅读模式
/*
*函 数 名:OLED_DisPlaySet()
*函数功能:OLED显示设置修改界面任务
*/
static void OLED_DisPlaySet(void* parameter)
{
    UBaseType_t xReturn = pdTRUE;
    u8 T_queue;
    while(1)
    {
        
        if(pdTRUE == xQueueReceive(Control_Queue,&T_queue,portMAX_DELAY))
        {
            
            xReturn = xSemaphoreTakeRecursive(OLED_Task_change_Handle,portMAX_DELAY);
            if(xReturn == pdTRUE)
                {
                    printf("%d \r\n",T_queue);
                }
        }

    }
}
这里按下按键1和2进行数值大小调整,此时占用OLED屏幕资源,在按键无操作2s后,自动释放递归互斥量,数显任务获得互斥量,使用OLED资源。怎么实现才能满足这个要求?


回复

使用道具 举报

 楼主| 发表于 2020-2-14 17:59:21 | 显示全部楼层
我在接收到消息队列后,启动单次定时器任务,但是释放互斥量放在那里我就搞不好
回复 支持 反对

使用道具 举报

发表于 2020-2-26 13:53:38 | 显示全部楼层
  把 if(pdTRUE == xQueueReceive(Control_Queue,&T_queue,portMAX_DELAY))

  中的portMAX_DELAY  修改为2秒的节拍数即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 20:44:02 | 显示全部楼层
ba_wang_mao 发表于 2020-2-26 13:53
把 if(pdTRUE == xQueueReceive(Control_Queue,&T_queue,portMAX_DELAY))

  中的portMAX_DELAY  修改 ...

我改了一种思路,不用互斥量。在定时结束后,释放任务
回复 支持 反对

使用道具 举报

发表于 2020-3-2 08:55:41 | 显示全部楼层
weirdo 发表于 2020-3-1 20:44
我改了一种思路,不用互斥量。在定时结束后,释放任务


   兄弟:

     1、互斥信号量是用于解决资源共享的。

         只有获取了互斥信号量,你才能安全的使用全局变量。


    2、信号量用于任务同步的


    这2个概念不要混淆


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:54:07 | 显示全部楼层
ba_wang_mao 发表于 2020-3-2 08:55
兄弟:

     1、互斥信号量是用于解决资源共享的。

谢谢指正
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 01:30 , Processed in 0.028374 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表