你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
月霜寒 提问时间:2017-4-13 10:25 /
在freertos中,使用可视化调试打印任务消息,但是打印不全,还只能打印一次,使用IAR自带的调试插件看,显示可视化调试任务的堆栈顶全是a,这事怎么回事?
收藏 1 评论6 发布时间:2017-4-13 10:25

举报

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

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

月霜寒 回答时间:2017-4-13 12:39:38
没人了解?
月霜寒 回答时间:2017-4-13 16:30:24
本帖最后由 月霜寒 于 2017-4-13 16:31 编辑

void Debugging_Task(void *pvParameters)//可视化调试任务
{
  char pcWriteBuffer[50];
  //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[50]设的太小了?
我看的安富莱德教程,是设的500个字节。相应的任务栈要分配的空间也要大于500字节。

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

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

  1. void Func_LED(void const * argument)
  2. {
  3.     /* USER CODE BEGIN Func_LED */
  4.     uint8_t pcWriteBuffer[500];
  5.     HAL_GPIO_WritePin(ERR_GPIO_Port, ERR_Pin, GPIO_PIN_SET);
  6.     /* Infinite loop */
  7.     for (;;)
  8.     {
  9.         HAL_GPIO_TogglePin(RUN_GPIO_Port, RUN_Pin);
  10.         HAL_GPIO_TogglePin(PWR_GPIO_Port, PWR_Pin);
  11.         printf("\r\n1秒时间到");
  12.         printf("=================================================\r\n");
  13.         printf("任务名      任务状态  优先级    剩余栈  任务序号\r\n");
  14.         vTaskList((char *) &pcWriteBuffer);
  15.         printf("%s\r\n", pcWriteBuffer);

  16.         printf("\r\n任务名        运行计数        使用率\r\n");
  17.         vTaskGetRunTimeStats((char *) &pcWriteBuffer);
  18.         printf("%s\r\n", pcWriteBuffer);
  19.         osDelay(1000);
  20.     }
  21.     /* USER CODE END Func_LED */
  22. }
复制代码



any012 回答时间:2017-4-15 11:02:47
应该就是pcWriteBuffer数组定义太小的原因,我试了定义为50,100,200个字节大小,前两次都不行,和你描述的现象一致。定义为200字节后才正常。

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

月霜寒 回答时间:2017-4-17 08:34:26
好,我试试

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版