月霜寒 发表于 2017-4-13 10:25:06

freertos可视化调试中打印任务信息是不是只可以打印一次?

在freertos中,使用可视化调试打印任务消息,但是打印不全,还只能打印一次,使用IAR自带的调试插件看,显示可视化调试任务的堆栈顶全是a,这事怎么回事?

月霜寒 发表于 2017-4-17 11:48:47

any012 发表于 2017-4-15 11:02
应该就是pcWriteBuffer数组定义太小的原因,我试了定义为50,100,200个字节大小,前两次都不行,和你描述 ...

没问题,说的完成正确!!

月霜寒 发表于 2017-4-13 12:39:38

没人了解?

月霜寒 发表于 2017-4-13 16:30:24

本帖最后由 月霜寒 于 2017-4-13 16:31 编辑

void Debugging_Task(void *pvParameters)//可视化调试任务
{
char pcWriteBuffer;
//portTickType xLastWakeTime;//最后一次释放时时间
pvParameters = pvParameters;
      
//xLastWakeTime=xTaskGetTickCount();
while(1)
{
    USART1_RX485_Gets();
    if(rece==1)
    {
      rece=0;
      vTaskList((char *)&pcWriteBuffer);
      /*任务状态:r:运行,R:就绪,B:阻塞,S:挂起,D:删除*/
      printf("任务名      任务状态优先级   剩余栈任务序号\r\n");
      printf("%s\r\n",pcWriteBuffer);
      vTaskGetRunTimeStats((char *)&pcWriteBuffer);
      printf("\r\n任务名         运行计数       使用率\r\n");
      printf("%s\r\n",pcWriteBuffer);
      printf("剩余动态内存为:%d\r\n",xPortGetFreeHeapSize());
      
    }
    else
    {}
    //TaskDelayUntil(&xLastWakeTime,1000);//使用这个函数能完成精确周期调用
    vTaskDelay(500); //系统延时的心跳数,可设置
}
}
这是我可视化调试的打印部分函数

any012 发表于 2017-4-15 10:39:01

本帖最后由 any012 于 2017-4-15 10:45 编辑

是不是pcWriteBuffer设的太小了?
我看的安富莱德教程,是设的500个字节。相应的任务栈要分配的空间也要大于500字节。

我这阵子也遇到了类似问题。
一开始是任务给的栈太小了,我用的20k byteRAM的片子。用CUBE生成工程时默认给每个任务分配128words,而按教程里任务里一开始就减了500字节的数组,结果任务空间不够用了。后来给该任务分配了2k RAM。

输出任务使用率这部分,一开始我这里也没有显示出来。后来发现,调试信息用的定时器,我忘记了打开。

void Func_LED(void const * argument)
{
    /* USER CODE BEGIN Func_LED */
    uint8_t pcWriteBuffer;
    HAL_GPIO_WritePin(ERR_GPIO_Port, ERR_Pin, GPIO_PIN_SET);
    /* Infinite loop */
    for (;;)
    {
      HAL_GPIO_TogglePin(RUN_GPIO_Port, RUN_Pin);
      HAL_GPIO_TogglePin(PWR_GPIO_Port, PWR_Pin);
      printf("\r\n1秒时间到");
      printf("=================================================\r\n");
      printf("任务名      任务状态优先级    剩余栈任务序号\r\n");
      vTaskList((char *) &pcWriteBuffer);
      printf("%s\r\n", pcWriteBuffer);

      printf("\r\n任务名      运行计数      使用率\r\n");
      vTaskGetRunTimeStats((char *) &pcWriteBuffer);
      printf("%s\r\n", pcWriteBuffer);
      osDelay(1000);
    }
    /* USER CODE END Func_LED */
}


any012 发表于 2017-4-15 11:02:47

应该就是pcWriteBuffer数组定义太小的原因,我试了定义为50,100,200个字节大小,前两次都不行,和你描述的现象一致。定义为200字节后才正常。

月霜寒 发表于 2017-4-17 08:34:26

好,我试试
页: [1]
查看完整版本: freertos可视化调试中打印任务信息是不是只可以打印一次?