11.获取任务运行时间
11.1函数描述 void vTaskGetRunTimeStats( char*pcWriteBuffer ); 这个函数用于统计每个任务的运行时间。要使用这个函数必须满足一些条件,那就是必须有一个用于时间统计的定时器或计数器,这个定时器或计数器的精度要至少大于10倍的系统节拍周期。这个定时器或计数器的配置以及获取定时时间是由两个宏定义实现的,这两个宏一般在文件FreeRTOSConfig.h中定义。配置定时器或计数器的宏为portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(),获取定时时间的宏为portGET_RUN_TIME_COUNTER_VALUE。实现了这两个宏定义后,还必须在文件FreeRTOSConfig.h中将宏configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS设置为1,此API函数才有效。 这个API函数调用usTaskGetSystemState()函数获取每个任务的状态信息,并把其中的运行时间格式化为程序员易读的字符形式,并将这些信息保存到参数pcWriteBuffer指向的区域。 注意,调用这个函数会挂起所有任务,这一过程可能持续较长时间,因此本函数仅在调试时使用。 11.2参数描述
- pcWriteBuffer:任务的运行时间信息会写入这个缓冲区,为ASCII表单形式。这个缓冲区要足够大,以容纳生成的报告,每个任务大约需要40个字节。
11.3用法举例 以lpc17xx系列为控制为例,我们使用定时器0来作为统计基准时钟。 11.3.1使能函数宏 在文件FreeRTOSConfig.h中,设置宏configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS为1, 11.3.2定时初始化定时器代码
void vConfigureTimerForRunTimeStats( void )
{
/* 使能定时器0的外设电源,配置外设时钟 */
PCONP |= 0x02UL;
PCLKSEL0 = (PCLKSEL0& (~(0x3<<2))) | (0x01 << 2);
/* 复位定时器 0 */
T0TCR = 0x02;
/* 作为计数器 */
T0CTCR = 0x00;
/* 预分频,设置合适的分辨率即可 */
T0PR = ( configCPU_CLOCK_HZ / 10000UL ) - 1UL;
/* 启动计数器 */
T0TCR = 0x01;
}
11.3.3定义配置定时器和获取定时时间宏 在文件FreeRTOSConfig.h中,定义下列代码:
extern void vConfigureTimerForRunTimeStats( void );
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()
#defineportGET_RUN_TIME_COUNTER_VALUE() T0TC
|