10,FreeRTOS任务运行时间统计

 一、实验目标


        创建三个动态任务,栈空间大小均为128字。startTask、Task1、Task2。startTask仅运行一次,负责task1、task2任务的创建,startTask任务的删除。Task1负责1S闪烁一次,指示系统运行状态。Task2负责获取任务运行时间,并用串口发送。

注:本实验基于正点原子FreeRTOS教程的学习总结。

 二、实验准备

1.FreeRTOS的Keil动态任务创建与删除程序

2.STM3F407开发板

3.宏定义开启

        将configGENERATE_RUN_TIME_STATS  、configUSE_TRACE_FACILITY、configUSE_STATS_FORMATTING_FUNCTIONS置一 。

/* 运行时间和任务状态统计相关定义 */
#define configGENERATE_RUN_TIME_STATS                   1                       /* 1: 使能任务运行时间统计功能, 默认: 0 */
#if configGENERATE_RUN_TIME_STATS
#include "./BSP/TIMER/btim.h"
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()        ConfigureTimeForRunTimeStats()
extern uint32_t FreeRTOSRunTimeTicks;
#define portGET_RUN_TIME_COUNTER_VALUE()                FreeRTOSRunTimeTicks
#endif
#define configUSE_TRACE_FACILITY                        1                       /* 1: 使能可视化跟踪调试, 默认: 0 */
#define configUSE_STATS_FORMATTING_FUNCTIONS            1                       /* 1: configUSE_TRACE_FACILITY为1时,会编译vTaskList()和vTaskGetRunTimeStats()函数, 默认: 0 */

   4.所需API函数介绍

 获取指定任务的运行时间、运行状态等信息,若使用此函数,需在F reeRTOSConfig.h 文件中同时设置配置项configGENERATE_RUN_TIME_STAT S 、configUSE_STATS_FORMATTING_FUNCTIONS 、configSUPPORT_DYNAMIC_ALLOCATION
为1。

        输入为接收任务运行时间和运行状态信息的缓存指针。

void vTaskGetRunTimeStats(char * pcWriteBuffer);

   5.btim文件定义时基

        在.c文件中定义FreeRTOSRunTimeTicks,以及函数ConfigureTimeForRunTimeStats(),,并在中断中让变量自加。记得在btim.h文件中对函数进行定义。

uint32_t FreeRTOSRunTimeTicks; 						//FreeRTOS获取任务运行时间值
void ConfigureTimeForRunTimeStats(void)
{
		btim_tim6_int_init(10-1, 84-1); //定时器时钟为84M,设置定时时间为10us
		FreeRTOSRunTimeTicks = 0;
		
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == BTIM_TIM6_INT)
    {
       FreeRTOSRunTimeTicks++;
    }
}

 三、代码编写

3.1修改Task1的任务函数内容

        Task1实现LED1s闪烁。

void task1(void *pvParameters)
{
    while(1)
    {
				LED1_TOGGLE();
				vTaskDelay(100);
    }
}

 3.2修改Task2的任务函数内容

        Task2实现任务运行时间统计与发送。

char task_buf[500];
void task2(void *pvParameters)
{
	while(1)
	{
			vTaskDelay(2000);
			vTaskGetRunTimeStats(task_buf);
			printf("%s\r\n",task_buf);
	}
}

四、实验现象

        实验现象如下所示。可以看到列出所有系统的任务运行时间,以及占用的总时间比例。注意这里的运行时间时基于ConfigureTimeForRunTimeStats()函数所初始化的定时器时间的,真正的运行时间为获取数字*定时器时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值