DSP_TMS320F28377D_使用定时器实现<获取代码块运算时间>的功能

news2025/2/24 5:56:19

前言

给大家拜个晚年,此博客是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的相关实现是一致的。

注解3DSP平台与STM32平台的不同之处是,STM32的计数器是向上计数的,而DSP平台的计数器是向下计数的。 一旦开始计数, 芯片会将周期寄存器的值装载到计数寄存器当中,每过一个计数周期,计数寄存器的值 - 1。因此在计算运行时长的时候是用定时器周期寄存器的值 - 当前计数寄存器的值,再乘以 * 0.005 (=  / 200),得到的运行时长单位为us。

运行结果

用DSP自带库里的延时函数进行测试,结果相差不大,证明该方法可用。另外,实验也说明该方法可在循环中不断的测试某代码块的运行时间。

重要意义:用本文提供的方法测试代码块的运行时间,可以实时运行时间数据通过通信接口传出的。在有上位机的应用当中,就可以实时显示某模块的运算时间的。

感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发表计算机 SCI 论文有多难? - 易智编译EaseEditing

发表SCI论文的对本科生来说点难度&#xff0c;一般论文的水平是这样&#xff1a;普刊&#xff1c;核心&#xff1c;SCI。 不同的专业都可以发SCI&#xff0c;只是影响因子高低不用而已&#xff0c;有的领域分值高&#xff0c;有的偏低。 就是说不同领域SCI期刊&#xff0c;影响…

液晶12864显示图片

液晶12864简介12864是128*64点阵液晶模块的点阵数简称。基本参数1、低电源电压&#xff08;VDD:3.0&#xff5e;5.5V&#xff09;。2、显示分辨率:12864 点。3、内置汉字字库&#xff0c;提供8192 个1616 点阵汉字。4、内置128 个168 点阵字符。5、2MHZ时钟频率。6、显示方式&a…

HCIA-Datacom题库2023最新放送,能答对60%就拿下证书

HCIA的学习是网络工程师这条路的开始。如果你准备好了&#xff0c;就往下看&#xff01;HCIA认证是华为公司认证体系中的初级认证&#xff0c;是一个入门认证&#xff0c;它包含的技术很简单&#xff0c;只是一个单核心的小网络&#xff0c;距离一个合格的网络工程师还有一段距…

电子文件全程管理与信息安全保障的并行之路

这篇文章是笔者2014年发表在《保密科学技术》第6期的一篇文章&#xff0c;时隔8年温习了一遍之后感觉还是有一定的可取之处&#xff0c;时至今日依然没有明显落伍&#xff0c;所以在修改完善其中部分内容之后分享给大家。 原文 Part. 01 引言 从上世纪八九十年代开始&#xff…

Nacos目录挂载并实现持久化

目录挂在docker pull ndocker pull nacos/nacos-server:v2.0.4 acos/nacos-server:v2.0.4 docker run -d --name nacos -e JVM_XMS256m -e JVM_XMX512m -e MODEstandalone --restartalways -p 8848:8848 nacos/nacos-server:1.4.2docker run -d --name nacos -e JVM_XMS256m -e…

作为一个合格的测试工程师如何跟开发有效沟通?

测试人员每天的例行工作之一就是与开发沟通代码改动&#xff0c;并对改动进行功能回归&#xff0c;我们称之为测试范围确认。对于每个测试人员来说&#xff0c;可能都会遇到以下问题&#xff1a; 1、拿到一个代码改动后我首先做什么&#xff1f; 2、跟开发沟通时问些什么&…

【Cocos新手入门】cocos creator操作 canvas绑定脚本及通过代码操作label组件变化的方法

本篇文章主要讲解利用cocos creator操作 canvas绑定脚本及通过代码操作label组件变化的方法 作者&#xff1a;任聪聪 日期&#xff1a;2023年1月31日 本篇文章仅适合cocos 2.4.3引擎版本下进行练习&#xff0c;其他版本可参考只有写法不同。 基本的操作说明 步骤一、通过cocos…

OJ万题详解––木板上的蚂蚁(C++详解)

题目 题目描述 有一块木板&#xff0c;长度为 n 个 单位 。一些蚂蚁在木板上移动&#xff0c;每只蚂蚁都以 每秒一个单位 的速度移动。其中&#xff0c;一部分蚂蚁向 左 移动&#xff0c;其他蚂蚁向 右 移动。 当两只向 不同 方向移动的蚂蚁在某个点相遇时&#xff0c;它们会同…

MongoDB 数据库操作

场景&#xff1a; 已知广告点击数据的记录已经存在&#xff0c;数据统计在mongodb中&#xff0c;现在要统计广告列表pv和uv。 思路&#xff1a; 这个时候就想到mysql的聚合查询group、count、distinct&#xff0c;但是于是就找了好多文档&#xff0c;发现mongodb的语法和mys…

“易”起涨知识|一文告诉你数字化生产的优势

在信息化高速发展的时代&#xff0c;企业工厂的数字化转型已经不是想不想转的问题&#xff0c;而是必须得转的形势。 智慧工厂是现代工厂信息化发展的新阶段。是在数字化工厂的基础上&#xff0c;利用物联网的技术和设备监控技术加强信息管理和服务&#xff1b;清楚掌握产销流…

Dart语法学习-变量

一、 创建Dart File Hello, World void main() {print(Hello world); }Log: Hello world 二、变量 1.Dart 支持类型推断。 var name Voyager I;var year 1977;var antennaDiameter 3.7;var flybyObjects [A1, A2, A3, A4];var image {tags:[saturn],url:www.baidu,com};…

王道操作系统笔记(四)———— 进程同步与互斥

文章目录一、同步与互斥的概念1.1 同步与互斥的基本概念1.2 临界资源与共享资源1.3 独占设备与共享设备二、实现临界区互斥的基本方法2.1 软件实现方法2.1.1 单标志法2.1.2 双标志先检查法2.1.3 双标志后检查法2.1.4 Peterson 算法2.1.5 软件实现方法总结2.2 硬件实现方法2.2.1…

【电子通识】查找硬件学习资料的方法

做为一名硬件工程师&#xff0c;在工作中会经常遇到一些问题&#xff0c;这些问题最开始可能也并不知道是什么原因。对于这些异常现象&#xff0c;我们可能需要深入去了解电路原理或器件特性等方式&#xff0c;从原理上理解并解决。当再次遇到相同或相似的问题时&#xff0c;我…

Python爬虫2--数据解析方法:bs4库的使用和案例

目录标题数据解析1、BeautifulSoup库1.1 BeautifulSoup库入门1.1.1 BeautifulSoup类的基本元素&#xff1a;1.1.2 基于bs4库的HTML内容遍历方法1.1.3 基于bs4库的HTML格式化和编码1.2 信息组织和提取方法1.2.1 信息标记的三种形式&#xff1a;xml,json,yaml1.2.2 三种信息标记形…

360数据恢复如何操作?360安全卫士恢复误删文件的方法(详解)

3 60安全 卫士属于一款杀毒软件&#xff0c;这是很多人都知道的事情。但是你知道吗&#xff1f;3 60安全 卫士还有一个免费功能&#xff0c;就是文件恢复功能。 当文件被误删&#xff0c;电脑回收站又找不到&#xff0c;你可以尝试通过3 60里面的文件恢复功能来进行数据恢复。…

Leetcode:62. 不同路径、63. 不同路径 II(C++)

目录 62. 不同路径 问题描述&#xff1a; 实现代码与解析&#xff1a; 深度优先&#xff08;超时&#xff09;&#xff1a; 原理思路&#xff1a; 动态规划&#xff1a; 原理思路&#xff1a; 数学方法&#xff1a; 原理思路&#xff1a; 63. 不同路径 II 问题描述&…

AcWing蓝桥杯AB组辅导课09、复杂DP

文章目录前言一、复杂DP例题例题1&#xff1a;AcWing 1050. 鸣人的影分身&#xff08;线性dp&#xff09;分析题解&#xff1a;DP例题2&#xff1a;AcWing 1047. 糖果&#xff08;背包问题变形&#xff09;分析题解&#xff1a;DP&#xff08;01背包问题变形&#xff09;例题3&…

静态库与动态库的生成与使用

一、库文件 预编译——>编译——>汇编——>链接&#xff08;使用库&#xff09;——>可执行文件 二、生成库&#xff1a;把大量的已经实现的代码打包起来 生成动态库&#xff1a; 1、将源码遍历汇编生成二进制指令 gcc -fPIC -c child.c -o child.o 2、将所有二进…

即时通讯开发之详解TCP/IP中的UDP 协议

UDP 是传输层协议,和 TCP 协议处于一个分层中,但是与 TCP 协议不同,UDP 协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。UDP 协议头2.1UDP 端口号由于很多软件需要用到 UDP 协议,所以 UDP 协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能…

C 语言零基础入门教程(二十一)

C 头文件 头文件是扩展名为 .h 的文件&#xff0c;包含了 C 函数声明和宏定义&#xff0c;被多个源文件中引用共享。有两种类型的头文件&#xff1a;程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件&#xff0c;需要使用 C 预处理指令 #include 来引用它。前…