硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4296|回复: 4
收起左侧

[FreeRTOS] vTaskGetRunTimeStats 打印不出来

[复制链接]

10

主题

38

回帖

68

积分

初级会员

积分
68
发表于 2017-7-19 15:19:57 | 显示全部楼层 |阅读模式
HI   
      参考手册移植后发现 vTaskGetRunTimeStats 这个接口打印不出来内容或者只打印一次,我的代码如下,请帮忙看下,谢谢 !
  1. #include "stm32f103_main.h"
  2. static void vTaskLED1(void *pvParameters);
  3. static void vTaskLED2(void *pvParameters);
  4. static void vTaskLED3(void *pvParameters);
  5. static void vPrintTaskInfo(void *pvParameters);
  6. static void AppTaskCreate (void);
  7. static TaskHandle_t xHandleTaskLED1 = NULL;
  8. static TaskHandle_t xHandleTaskLED2 = NULL;
  9. static TaskHandle_t xHandleTaskLED3 = NULL;
  10. static TaskHandle_t xHandleTaskPrint = NULL;
  11. /*******************************************************************************
  12. *    函 数 名: vTaskLED1
  13. *    功能说明: 任务1
  14. *    形    参:  无
  15. *    返 回 值: 无
  16. *******************************************************************************/
  17. static void vTaskLED1(void *pvParameters)
  18. {
  19.     while(1)
  20.     {
  21.       Bsp_LEDToggle(LED1);
  22.       vTaskDelay(300);
  23.     }
  24. }
  25. /*******************************************************************************
  26. *    函 数 名: vTaskLED2
  27. *    功能说明: 任务2
  28. *    形    参:  无
  29. *    返 回 值: 无
  30. *******************************************************************************/
  31. static void vTaskLED2(void *pvParameters)
  32. {
  33.     while(1)
  34.     {
  35.       Bsp_LEDToggle(LED2);
  36.       vTaskDelay(400);
  37.     }
  38. }
  39. /*******************************************************************************
  40. *    函 数 名: vTaskLED3
  41. *    功能说明: 任务3
  42. *    形    参:  无
  43. *    返 回 值: 无
  44. *******************************************************************************/
  45. static void vTaskLED3(void *pvParameters)
  46. {
  47.     while(1)
  48.     {
  49.       Bsp_LEDToggle(LED3);
  50.       vTaskDelay(500);
  51.     }
  52. }
  53. /*******************************************************************************
  54. *    函 数 名: vPrintTaskInfo
  55. *    功能说明: 打印系统运行情况
  56. *    形    参:  无
  57. *    返 回 值: 无
  58. *******************************************************************************/
  59. static void vPrintTaskInfo(void *pvParameters)
  60. {
  61.     uint8_t pcWriteBuffer[500];
  62.     while(1)
  63.     {
  64.       printf("--------------------------------------\r\n");
  65.       printf("taskname  taskstatus taskpronum havestask tasknum\r\n");
  66.       vTaskList((char *)&pcWriteBuffer);
  67.       printf("%s\r\n", pcWriteBuffer);
  68.       printf("  taskname   taskcount  usestatus\r\n");
  69.       vTaskGetRunTimeStats((char *)&pcWriteBuffer);
  70.       printf(" %s\r\n", pcWriteBuffer);
  71.       vTaskDelay(800);
  72.     }
  73. }
  74. /*******************************************************************************
  75. *    函 数 名: AppTaskCreate
  76. *    功能说明: 创建任务
  77. *    形    参:  无
  78. *    返 回 值: 无
  79. *******************************************************************************/
  80. static void AppTaskCreate (void)
  81. {
  82.   //任务函数  任务名称 栈大小 任务参数 优先级  任务句柄
  83.   xTaskCreate( vTaskLED1,"vTaskLED1",512, NULL, 4,&xHandleTaskLED1);
  84.   xTaskCreate( vTaskLED2,"vTaskLED3",512, NULL, 3,&xHandleTaskLED2);
  85.   xTaskCreate( vTaskLED3,"vTaskLED3",512, NULL, 2,&xHandleTaskLED3);
  86.   xTaskCreate( vPrintTaskInfo,"vPrintTask",512, NULL, 1,&xHandleTaskPrint);
  87.   
  88. }
  89. int main(void)
  90. {
  91.   //为了防止初始化 STM32 外设时有中断服务程序执行,这里禁止全局中断(除了 NMI 和 HardFault)
  92.   __set_PRIMASK(1);
  93.   Bsp_Init();
  94.   AppTaskCreate();
  95.   //开始调度
  96.   vTaskStartScheduler();
  97.   while(1);
  98. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
110360
QQ
发表于 2017-7-19 15:33:58 | 显示全部楼层
看下我们教程的这个章节,有讲解。你贴的程序里面没有看到比滴答定时器分辨率高的定时器初始化
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
QQ截图20170719152936.png
回复

使用道具 举报

10

主题

38

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2017-7-19 15:37:26 | 显示全部楼层

回 eric2013 的帖子

  1. /*
  2. *********************************************************************************************************
  3. *  函 数 名: bsp_SetTIMforInt
  4. *  功能说明: 配置 TIM 和 NVIC,用于简单的定时中断. 开启定时中断。 中断服务程序由应用程序实现。
  5. *  形 参: TIMx : 定时器
  6. *  _ulFreq : 定时频率 (Hz)。 0 表示关闭。
  7. *  _PreemptionPriority : 中断优先级分组
  8. *  _SubPriority : 子优先级
  9. *  返 回 值: 无
  10. *********************************************************************************************************
  11. */
  12. void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)
  13. {
  14.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  15.     uint16_t usPeriod;
  16.     uint16_t usPrescaler;
  17.     uint32_t uiTIMxCLK;
  18.     NVIC_InitTypeDef NVIC_InitStructure;   
  19.     uint8_t irq = 0;   
  20.       /* 使能TIM时钟 */
  21.     if ((TIMx == TIM1))
  22.     {
  23.         RCC_APB2PeriphClockCmd(bsp_GetRCCofTIM(TIMx), ENABLE);
  24.     }
  25.     else
  26.     {
  27.         RCC_APB1PeriphClockCmd(bsp_GetRCCofTIM(TIMx), ENABLE);
  28.     }
  29.     if (_ulFreq == 0)
  30.     {
  31.         TIM_Cmd(TIMx, DISABLE);        /* 关闭定时输出 */
  32.         if (TIMx == TIM1)
  33.             irq = TIM1_UP_IRQn;
  34.         else if (TIMx == TIM2)
  35.             irq = TIM2_IRQn;
  36.         else if (TIMx == TIM3)
  37.             irq = TIM3_IRQn;
  38.         else if (TIMx == TIM4)
  39.             irq = TIM4_IRQn;
  40.         NVIC_InitStructure.NVIC_IRQChannel = irq;
  41.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = _PreemptionPriority;
  42.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = _SubPriority;
  43.         NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
  44.         NVIC_Init(&NVIC_InitStructure);        
  45.         return;
  46.     }
  47.     if ((TIMx == TIM1))
  48.     {
  49.         /* APB2 定时器 */
  50.         uiTIMxCLK = 72000000;
  51.     }
  52.     else    /* APB1 定时器 .  */
  53.     {
  54.         uiTIMxCLK = 72000000/2;    // SystemCoreClock / 2;
  55.     }
  56.     if (_ulFreq < 100)
  57.     {
  58.         usPrescaler = 10000 - 1;                    /* 分频比 = 1000 */
  59.         usPeriod =  (uiTIMxCLK / 10000) / _ulFreq  - 1;        /* 自动重装的值 */
  60.     }
  61.     else if (_ulFreq < 3000)
  62.     {
  63.         usPrescaler = 100 - 1;                    /* 分频比 = 100 */
  64.         usPeriod =  (uiTIMxCLK / 100) / _ulFreq  - 1;        /* 自动重装的值 */
  65.     }
  66.     else    /* 大于4K的频率,无需分频 */
  67.     {
  68.         usPrescaler = 0;                    /* 分频比 = 1 */
  69.         usPeriod = uiTIMxCLK / _ulFreq - 1;    /* 自动重装的值 */
  70.     }
  71.     /* Time base configuration */
  72.     TIM_TimeBaseStructure.TIM_Period = usPeriod;
  73.     TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler;
  74.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  75.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  76.     TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  77.     TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);
  78.     TIM_ARRPreloadConfig(TIMx, ENABLE);
  79.     /* TIM Interrupts enable */
  80.     TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE);
  81.     /* TIMx enable counter */
  82.     TIM_Cmd(TIMx, ENABLE);
  83.     if (TIMx == TIM1)
  84.         irq = TIM1_UP_IRQn;
  85.     else if (TIMx == TIM2)
  86.         irq = TIM2_IRQn;
  87.     else if (TIMx == TIM3)
  88.         irq = TIM3_IRQn;
  89.     else if (TIMx == TIM4)
  90.         irq = TIM4_IRQn;
  91.     NVIC_InitStructure.NVIC_IRQChannel = irq;
  92.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = _PreemptionPriority;
  93.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = _SubPriority;
  94.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  95.     NVIC_Init(&NVIC_InitStructure);
  96.    
  97. }
复制代码
上面是我的系统定时器,设置的频率也为 2k使用的是 TIM3  

eric2013
:
看下我们教程的这个章节,有讲解。你贴的程序里面没有看到比滴答定时器分辨率高的定时器初始化
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658

HI   
      参考手册移植后发现 vTaskGetRunTimeStats 这个接口打印不出来内容或者只打印一次,我的代码如下,请帮忙看下,谢谢 !
  1. #include "stm32f103_main.h"
  2. static void vTaskLED1(void *pvParameters);
  3. static void vTaskLED2(void *pvParameters);
  4. static void vTaskLED3(void *pvParameters);
  5. static void vPrintTaskInfo(void *pvParameters);
  6. static void AppTaskCreate (void);
  7. static TaskHandle_t xHandleTaskLED1 = NULL;
  8. static TaskHandle_t xHandleTaskLED2 = NULL;
  9. static TaskHandle_t xHandleTaskLED3 = NULL;
  10. static TaskHandle_t xHandleTaskPrint = NULL;
  11. /*******************************************************************************
  12. *        函 数 名: vTaskLED1
  13. *        功能说明: 任务1
  14. *        形    参:  无
  15. *        返 回 值: 无
  16. *******************************************************************************/
  17. static void vTaskLED1(void *pvParameters)
  18. {
  19.     while(1)
  20.     {
  21.       Bsp_LEDToggle(LED1);
  22.       vTaskDelay(300);
  23.     }
  24. }
  25. /*******************************************************************************
  26. *        函 数 名: vTaskLED2
  27. *        功能说明: 任务2
  28. *        形    参:  无
  29. *        返 回 值: 无
  30. *******************************************************************************/
  31. static void vTaskLED2(void *pvParameters)
  32. {
  33.     while(1)
  34.     {
  35.       Bsp_LEDToggle(LED2);
  36.       vTaskDelay(400);
  37.     }
  38. }
  39. /*******************************************************************************
  40. *        函 数 名: vTaskLED3
  41. *        功能说明: 任务3
  42. *        形    参:  无
  43. *        返 回 值: 无
  44. *******************************************************************************/
  45. static void vTaskLED3(void *pvParameters)
  46. {
  47.     while(1)
  48.     {
  49.       Bsp_LEDToggle(LED3);
  50.       vTaskDelay(500);
  51.     }
  52. }
  53. /*******************************************************************************
  54. *        函 数 名: vPrintTaskInfo
  55. *        功能说明: 打印系统运行情况
  56. *        形    参:  无
  57. *        返 回 值: 无
  58. *******************************************************************************/
  59. static void vPrintTaskInfo(void *pvParameters)
  60. {
  61.     uint8_t pcWriteBuffer[500];
  62.     while(1)
  63.     {
  64.       printf("--------------------------------------\\r\\n");
  65.       printf("taskname  taskstatus taskpronum havestask tasknum\\r\\n");
  66.       vTaskList((char *)&pcWriteBuffer);
  67.       printf("%s\\r\\n", pcWriteBuffer);
  68.       printf("  taskname   taskcount  usestatus\\r\\n");
  69.       vTaskGetRunTimeStats((char *)&pcWriteBuffer);
  70.       printf(" %s\\r\\n", pcWriteBuffer);
  71.       vTaskDelay(800);
  72.     }
  73. }
  74. /*******************************************************************************
  75. *        函 数 名: AppTaskCreate
  76. *        功能说明: 创建任务
  77. *        形    参:  无
  78. *        返 回 值: 无
  79. *******************************************************************************/
  80. static void AppTaskCreate (void)
  81. {
  82.   //任务函数  任务名称 栈大小 任务参数 优先级  任务句柄
  83.   xTaskCreate( vTaskLED1,"vTaskLED1",512, NULL, 4,&xHandleTaskLED1);
  84.   xTaskCreate( vTaskLED2,"vTaskLED3",512, NULL, 3,&xHandleTaskLED2);
  85.   xTaskCreate( vTaskLED3,"vTaskLED3",512, NULL, 2,&xHandleTaskLED3);
  86.   xTaskCreate( vPrintTaskInfo,"vPrintTask",512, NULL, 1,&xHandleTaskPrint);
  87.   
  88. }
  89. int main(void)
  90. {
  91.   //为了防止初始化 STM32 外设时有中断服务程序执行,这里禁止全局中断(除了 NMI 和 HardFault)
  92.   __set_PRIMASK(1);
  93.   Bsp_Init();
  94.   AppTaskCreate();
  95.   //开始调度
  96.   vTaskStartScheduler();
  97.   while(1);
  98. }
复制代码
回复

使用道具 举报

10

主题

38

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2017-7-19 15:43:34 | 显示全部楼层
找到原因了,是我自己的问题,为了测试接口将

#define  timerINTERRUPT_FREQUENCY    20000
这个定义修改成 1 导致的, 多谢解答 谢谢
回复

使用道具 举报

1万

主题

6万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
110360
QQ
发表于 2017-7-19 15:56:00 | 显示全部楼层

回 wendell.li 的帖子

wendell.li:找到原因了,是我自己的问题,为了测试接口将

#define  timerINTERRUPT_FREQUENCY    20000
这个定义修改成 1 导致的, 多谢解答 谢谢 (2017-07-19 15:43) 
[s:130]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-9-21 09:29 , Processed in 0.246909 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表