FreeRTOS学习

一、建立三个任务

  按键,LED,串口

  FreeRTOS学习

二、任务堆栈信息打印

  FreeRTOS学习

uint8_t u8TaskListBuff[400];
/**
*@FUN:任务信息
*@PRO:栈名、栈状态、优先级、栈的剩余空间、任务序号
*@BAK:LQW 
*/int8_t Log_TaskStaMsg(void)
{//
    memset(u8TaskListBuff, 0, 400);
    vTaskList((char*)u8TaskListBuff);
    printf("任务堆栈大小\r\n");
    printf("Name           State  Priority Stack  Num\r\n");
    printf("******************************************************\r\n");
    printf("%s",u8TaskListBuff);
    printf("******************************************************\r\n");
    return 0;
}

三、任务系统占用率打印

  FreeRTOS学习

 

uint8_t u8TaskListBuff[400];
uint32_t gu32TimeCount = 0;//添加一个到50-200us的定时器里面循环加加
/***************************任务运行时间函数***************************/
//#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
void configureTimerForRunTimeStats(void){
  HAL_TIM_Base_Start_IT(&htim2);    //开启TIM6中断并启动定时器
  gu32TimeCount = 0ul;        //定时器统计值初始化为0
}
//#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue 
unsigned long getRunTimeCounterValue(void){
  return gu32TimeCount;
} 
/**
*@FUN:
*@PRO:
*@BAK:LQW    
*/int8_t Log_TaskPesMsg(void)
{//
    memset(u8TaskListBuff, 0, 400);
    vTaskGetRunTimeStats((char*)u8TaskListBuff);
    printf("处理器利用率统计\r\n");
    printf("Name      Abs Time    Time\r\n");
    printf("******************************************************\r\n");
    printf("%s",u8TaskListBuff);
    printf("******************************************************\r\n");
    return 0;
}


//*********main.c  50us定时器处调用的
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */
  if (htim->Instance == TIM1) {
    HAL_IncTick();
  }
  /* USER CODE BEGIN Callback 1 */
  if(htim->Instance == TIM2){
    gu32TimeCount++;
  }
  /* USER CODE END Callback 1 */
}

循环1秒调用 Log_TaskPesMsg 即可实现任务占用率查看

 

上一篇:说出来你可能不信,从外包辞职后的 400 天,走进字节跳动拿了 offer


下一篇:day7.11