单片机测量任务运行时间

前言

1.之前是直接看定时器的计数值来粗略估计,可能会存在一些差错,也不够方便;所以做一个比较通用的计算任务运行时间的小Demo。

2.用定时器的计数值查看开始的Tick和结束的Tick,然后定时器每隔1毫秒溢出一次,通过简单计算,求任务运行时间。

3.在测到us级时存在误差,可能是一些语句执行需要时间,不过任务执行时间为us级,对单片机运行整体上没什么影响。

3.毫秒级和秒级基本准确。

有纰漏请指出,转载请说明。

学习交流请发邮件 [email protected]


runTime.h

#ifndef __RUN_TIME_H
#define __RUN_TIME_H

#include "includes.h"

typedef enum {
	TaskRunTime1 = 0,
	TaskRunTime2,
	TaskRunTime3,
	TaskRunTimeNum,
} TaskRunTime_Num;

typedef enum {
	TaskRunTimeStart,
	TaskRunTimeRunning,
	TaskRunTimeStop,
} TaskRunTime_Flag;

typedef struct {
	u32 startTick;
	u32	stopTick;
	u32 overFlowCnt;
	u32 runTime;
	TaskRunTime_Flag flag;
} TaskRunTime_S;

void TaskStartTick(TaskRunTime_Num taskx);
void TaskStopTick(TaskRunTime_Num taskx);
void TaskRunTimeOverFlow(void);

#endif //__RUN_TIME_H

runTime.c

#include "includes.h"

__IO TaskRunTime_S stRunTime[TaskRunTimeNum];

void TaskStartTick(TaskRunTime_Num taskx)
{
	memset(&stRunTime[taskx], 0, sizeof(TaskRunTime_S));
	stRunTime[taskx].startTick =  TIM4->CNT;
	stRunTime[taskx].flag = TaskRunTimeStart;
}

void TaskStopTick(TaskRunTime_Num taskx)
{
	s16 timeInterval = 0;
	stRunTime[taskx].stopTick = TIM4->CNT;
	stRunTime[taskx].flag = TaskRunTimeStop;
	timeInterval = (stRunTime[taskx].stopTick - stRunTime[taskx].startTick);	
	stRunTime[taskx].runTime = 1000 * stRunTime[taskx].overFlowCnt + timeInterval;
}

void TaskRunTimeOverFlow(void)
{
	for (int i=0; i

演示

单片机测量任务运行时间_第1张图片

你可能感兴趣的:(单片机,嵌入式硬件)