单片机测量任务运行时间

前言

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

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

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

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

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

学习交流请发邮件 1280253714@qq.com


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<TaskRunTimeNum; i++)
	{
		if (stRunTime[i].flag == TaskRunTimeStart)
		{
			stRunTime[i].overFlowCnt++;
		}
	}
}

void TIM4_IRQHandler(void)
{
	if ( TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET ) 
	{		
		TaskRunTimeOverFlow();
		TIM_ClearITPendingBit(TIM4 , TIM_FLAG_Update);  		 
	}	
}

演示

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值