FreeRTOS查看系统运行状态

首先更改FreeRTOSConfig.h文件的相关宏定义

//启用运行时间统计功能
#define configGENERATE_RUN_TIME_STATS            1
//启用可视化跟踪调试
#define configUSE_TRACE_FACILITY                 1
#define configUSE_STATS_FORMATTING_FUNCTIONS     1

再在该h文件添加:

extern volatile uint32_t CPU_RunTime;
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()	(CPU_RunTime = 0ul)                                                                        
#define portGET_RUN_TIME_COUNTER_VALUE()			 CPU_RunTime

主要涉及两个函数:

vTaskList( char * pcWriteBuffer )

这个函数主要是列出任务的信息,如任务名、任务状态、优先级、剩余栈大小、任务序号。

vTaskGetRunTimeStats( char *pcWriteBuffer )

这个函数主要统计任务的运行计数,CPU的使用率

完整代码:

 /* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle;
/* LED_Task任务句柄 */
static TaskHandle_t LED_Task_Handle;
/* CPU_Ifo_Task任务句柄 */
static TaskHandle_t CPU_Ifo_Task_Handle;

static void AppTaskCreate(void);/* 用于创建任务 */
static void Bord_Init(void);/* 用于初始化板载相关资源 */
static void LED_Task(void* pvParameters);/* LED_Task任务实现 */
static void CPU_Ifo_Task(void* pvParameters);/* CPU_Ifo_Task任务实现 */
static void TIM6_Init(void);

int main(void)
{	

  /* 开发板硬件初始化 */
  Bord_Init();
	
  /* 创建AppTaskCreate任务 */
   xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任务入口函数 */
							 (const char*    )"AppTaskCreate",/* 任务名字 */
							 (uint16_t       )128,  /* 任务栈大小 */
							 (void*          )NULL,/* 任务入口函数参数 */
							 (UBaseType_t    )1, /* 任务的优先级 */
							 (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任务控制块指针 */ 
							 
  /* 启动任务调度 */           
  vTaskStartScheduler();
							 
  while(1);   
}

static void AppTaskCreate(void)
{ 
  taskENTER_CRITICAL();           //进入临界区
 
  /* 创建LED_Task任务 */
  xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */
							(const char*    )"LED_Task",/* 任务名字 */
							(uint16_t       )128,   /* 任务栈大小 */
							(void*          )NULL,	/* 任务入口函数参数 */
							(UBaseType_t    )2,	    /* 任务的优先级 */
							(TaskHandle_t*  )&LED_Task_Handle);/* 任务控制块指针 */
							
  /* 创建CPU_Ifo_Task任务 */
  xTaskCreate((TaskFunction_t )CPU_Ifo_Task,/* 任务入口函数 */
							(const char*		)"CPU_Ifo_Task",/* 任务名字 */
							(uint16_t				)128,		/* 任务栈大小 */
							(void*          )NULL,	/* 任务入口函数参数 */
							(UBaseType_t    )3,			/* 任务的优先级 */
							(TaskHandle_t*  )&CPU_Ifo_Task_Handle);/* 任务控制块指针 */

								 
  vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();            //退出临界区
}

static void CPU_Ifo_Task(void* parameter)
{	
	u8 pcWriteBuffer[200];
	
	for(;;)
	{
		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);

		vTaskDelay(1500);		
	}
}

static void LED_Task(void* parameter)
{	
	for(;;)
	{
		LED_B_TOGGLE;
		vTaskDelay(1000);		
	}
}

static void Bord_Init(void)
{
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );

	TIM6_Init();

	/* 串口初始化	*/
	USART_Config();
  
	LED_Config(LED_GPIO_PORT,LED_B_PIN);
}

static void TIM6_Init(void)
{
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );

	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruct;
	NVIC_InitTypeDef NVIC_InitTypeStruct;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
	
	NVIC_InitTypeStruct.NVIC_IRQChannel = TIM6_IRQn;
	NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 5;
	NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitTypeStruct);
	
	TIM_TimeBaseInitTypeStruct.TIM_Prescaler = 71;
	TIM_TimeBaseInitTypeStruct.TIM_Period = 999; //1ms
	TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitTypeStruct);
	
	TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
	TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
	TIM_Cmd(TIM6,ENABLE);
	
}

最终输出信息:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值