STM32 用CUBE IDE 写freertos中的osThreadEnumerate函数,发现没有得到自己想要的值

osThreadEnumerate这个函数不理解怎么用,拆开看其内部怎么写的,有如下

uint32_t osThreadEnumerate (osThreadId_t *thread_array, uint32_t array_items) {
  uint32_t i, count;
  TaskStatus_t *task;

  if (IS_IRQ() || (thread_array == NULL) || (array_items == 0U)) {
    count = 0U;
  } else {
    vTaskSuspendAll();

    count = uxTaskGetNumberOfTasks();
    task  = pvPortMalloc (count * sizeof(TaskStatus_t));

    if (task != NULL) {
      count = uxTaskGetSystemState (task, count, NULL);

      for (i = 0U; (i < count) && (i < array_items); i++) {
        thread_array[i] = (osThreadId_t)task[i].xHandle;
      }
      count = i;
    }
    (void)xTaskResumeAll();

    vPortFree (task);
  }

  return (count);
}

我有代码如下

  uint32_t ArraySize, x,i;
  osThreadId_t *thread_array;

  for(;;)
  {
    osDelay(1000);
    ArraySize = osThreadGetCount();
    printf("Task size is %ld ok\t\n\r",ArraySize);
    i = osThreadEnumerate(&thread_array,ArraySize);
    printf("Task size is %ld\t\n\r",ArraySize);

  }

打印的数据,第一次打印是6,第二次打印是一个很大的数,我跟着跑了一遍,没有发现哪里有修改这个变量,


Task size is 6 ok    
Task size is 603983608    

担心是有其他任务中断,也把其他任务关掉,还是没有效果,有用过这个函数的可以帮忙看下

追加一下:

程序在运行到vPortFree之前,变量都是对的,之后变量数值变化了。

查找这个vPortFree,里面的内容是释放使用的内存。所以这个变量的内容被这个函数释放了,没有了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值