前言
给大家拜个晚年,此博客是2023年的第一篇博客,希望在2023年我与各位大佬共同进步。以前在STM32上实现过相关的功能,链接如下:
STM32_使用定时器实现<获取代码块运算时间>的功能_江湖上都叫我秋博的博客-CSDN博客_stm32中代码块运行时间
本次的实现类似,只不过平台换成了DSP TMS320F28377D。使用CCS->Run->Clock的方式比较麻烦,我个人是不喜欢的,还是用定时器靠谱点, 话不多说,直接上代码。
正文
runtime.h 代码如下
#ifndef PROGRAM_RUNTIME_RUNTIME_H_
#define PROGRAM_RUNTIME_RUNTIME_H_
#include <main.h>
extern float64 runtime;
void runtime_init(void);
void runtime_start(void);
void runtime_stop(void);
#endif /* PROGRAM_RUNTIME_RUNTIME_H_ */
runtime.c 代码如下
#include <runtime.h>
float64 runtime = 0; // 单位us
void runtime_init(void){
ConfigCpuTimer(&CpuTimer1, 200, 10000000); // 支持代码块最长运行时常10s
}
void runtime_start(void){
CpuTimer1Regs.TCR.bit.TRB = 1; // 周期计时器重装载
CpuTimer1Regs.TCR.bit.TSS = 0; // 开始计数
}
void runtime_stop(void){
runtime = (float64)(CpuTimer1Regs.PRD.all - CpuTimer1Regs.TIM.all) * 0.005; // 等价于 / 200, 单位us
CpuTimer1Regs.TCR.bit.TSS = 1; // 停止计数
}
main.c 代码如下
void main(void)
{
// 省略 ...
runtime_init();
while(1){
runtime_start();
DELAY_US(1000);
runtime_stop();
}
}
注解1:代码中并未提及main.h以及项目的目录结构,关于头文件的引用及Include Options的配置就不赘述,本文更注重的是实现思路。
注解2:这款DSP TMS320F28377D是一款主频200M,双核的芯片。 本文只用CPU1做了相关实现,CPU2的相关实现是一致的。
注解3:DSP平台与STM32平台的不同之处是,STM32的计数器是向上计数的,而DSP平台的计数器是向下计数的。 一旦开始计数, 芯片会将周期寄存器的值装载到计数寄存器当中,每过一个计数周期,计数寄存器的值 - 1。因此在计算运行时长的时候是用定时器周期寄存器的值 - 当前计数寄存器的值,再乘以 * 0.005 (= / 200),得到的运行时长单位为us。
运行结果
用DSP自带库里的延时函数进行测试,结果相差不大,证明该方法可用。另外,实验也说明该方法可在循环中不断的测试某代码块的运行时间。
重要意义:用本文提供的方法测试代码块的运行时间,可以实时运行时间数据通过通信接口传出的。在有上位机的应用当中,就可以实时显示某模块的运算时间的。
感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。