打印
[uCOS/RTOS]

freertos 信号量使用疑问

[复制链接]
1579|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suxilong|  楼主 | 2019-3-7 19:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 suxilong 于 2019-3-7 19:05 编辑

有个需求,想实现, 让一个任务等待一个信号量,信号量来了解除阻塞,处理消息。然后等待下一个信号量的到来

但是一直到尾 都打印 “GIVE NG”

#include "FreeRTOS.h"
#include "semphr.h"
#include "projdefs.h"
#include "timers.h"

static TaskHandle_t     task_handles;
TimerHandle_t   timer_hadles;
SemaphoreHandle_t  run_semaphore;
static void timer_generate(void)
{
//10ms 跑一次 给出一下信号
if(xSemaphoreGive( run_semaphore ) != pdTRUE)
{
  OUT_LOG_I("GIVE NG");
}
}
void task(void)
{
// 创建信息量
run_semaphore = xSemaphoreCreateBinary();

if( run_semaphore != NULL )
{
  OUT_LOG_I("run_semaphore ok");
}

for (;;)
{
  //等待信号量到来
  if( xSemaphoreTake( run_semaphore, portMAX_DELAY ) == pdTRUE )
  {
   Msg_Process();
  }
  else
  {
   OUT_LOG_I("=====semaphore not get====");
  }

}
}

void task_create(void)
{
OUT_LOG_I("task create");
xTaskCreate(task,"task",640,NULL,1,&task_handles);
//每10ms产生一个信号量
timer_hadles = xTimerCreate("timer", TIMER_BASE/portTICK_PERIOD_MS, pdTRUE, NULL, timer_generate);
xTimerStart(timer_hadles, 0);

}

相关帖子

沙发
二九结狐六体| | 2019-3-8 09:41 | 只看该作者
,帮顶

使用特权

评论回复
板凳
suxilong|  楼主 | 2019-3-9 11:47 | 只看该作者

感觉二姨家的 OS  很冷清啊

使用特权

评论回复
地板
小鱼丸| | 2019-5-14 21:51 | 只看该作者
可以用队列

使用特权

评论回复
5
被遗忘的舍利| | 2019-6-21 11:20 | 只看该作者
怀疑你的task()任务就没有执行。从代码中看task_create(void)中创建了task任务和timer,启动了timer,但是没有启动任务调度器。所以task()任务就一直没有执行,也就没有创建二值信号量。定时器里面也就没法成功give信号量。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:没有最差,只有最懒

55

主题

339

帖子

4

粉丝