发现FreeRTOS V10.2.1 一个好像BUG的问题

2019-12-09 19:13发布

  1. void vTask1(void)
  2. {
  3. //        xTaskNotifyGive(xHandleTaskGame);                                //发出信号量
  4.         while(1)
  5.         {
  6.                 vTaskSuspend(xHandleTask2);                                        //挂起任务
  7.                 vTaskResume(xHandleTask2);                                        //恢复任务
  8.                 vTaskDelay(100);
  9.         }
  10. }

  11. void vTask2(void)
  12. {
  13.         uint32_t count=0;
  14.         while(1)
  15.         {
  16.                 ulTaskNotifyTake(pdTRUE,portMAX_DELAY);                //等待信号量
  17.                 count ++;
  18.         }
  19. }
复制代码

两个任务TASK1 TASK2,TASK1只要挂起和恢复TASK2,TASK2的任务信号ulTaskNotifyTake(pdTRUE,portMAX_DELAY)就变得有效,count++;

测试MCU STM32F030R8T6;FreeRTOS Kernel V10.2.1;

测试和优先级无关,堆栈没有溢出


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
flash3g
1楼-- · 2019-12-11 00:06
styleno1 发表于 2019-11-18 09:46
楼主定位到问题位置了吗?
ulTaskNotifyTake()返回值非零吗?

  1.         while( ! ulTaskNotifyTake(pdTRUE,portMAX_DELAY));        //等待信号量
复制代码

测试加一个判断可以解决问题,但是我觉得这可能是FreeRTOS的bug

一周热门 更多>