电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>可编程逻辑>简析获取单片机代码运行时间的方法资料下载

简析获取单片机代码运行时间的方法资料下载

2021-04-24 | pdf | 106.14KB | 次下载 | 3积分

资料介绍

单片机编程者需要知道自己的程序需要花费多长时间、while周期是多少、delay延时是否真如函数功能描述那样精确延时。很多时候,我们想知道这些参数,但是由于懒惰或者没有简单的办法,将这件事推到“明天”。笔者提出了一种简便的测试方法,可以解决这些问题。测试代码的运行时间的思路:使用单片机内部定时器,在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并进行平均取值。借助示波器的方法是:在待测程序段的开始阶段使单片机的一个GPIO输出高电平,在待测程序段的结尾阶段再令这个GPIO输出低电平。用示波器通过检查高电平的时间长度,就知道了这段代码的运行时间。显然,借助于示波器的方法更为简便。以下内容为这两种方案的实例,以STM32为测试平台。如果读者是在另外的硬件平台上测试,实际也不难,思路都是一样的,自己可以编写对应的测试代码。借助示波器方法的实例Delay_us函数使用STM32系统滴答定时器实现#include "systick.h"/* SystemFrequency / 1000 1ms中断一次* SystemFrequency / 100000 10us中断一次* SystemFrequency / 1000000 1us中断一次*/#define SYSTICKPERIOD 0.000001#define SYSTICKFREQUENCY (1/SYSTICKPERIOD)/*** @brief 读取SysTick的状态位COUNTFLAG* @param 无* @retval The new state of USART_FLAG (SET or RESET).*/static FlagStatus SysTick_GetFlagStatus(void){if(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk){return SET;}else{return RESET;}}/*** @brief 配置系统滴答定时器 SysTick* @param 无* @retval 1 = faiLED, 0 = successful*/uint32_t SysTick_Init(void){/* 设置定时周期为1us */if (SysTick_Config(SystemCoreClock / SYSTICKFREQUENCY)){/* Capture error */return (1);}/* 关闭滴答定时器且禁止中断 */SysTick->CTRL &= ~ (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);return (0);}/*** @brief us延时程序,10us为一个单位* @param* @arg nTime: Delay_us( 10 ) 则实现的延时为 10 * 1us = 10us* @retval 无*/void Delay_us(__IO uint32_t nTime){/* 清零计数器并使能滴答定时器 */SysTick->VAL = 0;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;for( ; nTime > 0 ; nTime--){/* 等待一个延时单位的结束 */while(SysTick_GetFlagStatus() != SET);}/* 关闭滴答定时器 */SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;}检验Delay_us执行时间中用到的GPIO(gpio.h、gpio.c)的配置#ifndef __GPIO_H#define __GPIO_H#include "stm32f10x.h"#define LOW 0#define HIGH 1/* 带参宏,可以像内联函数一样使用 */#define TX(a) if (a) \GPIO_SetBits(GPIOB,GPIO_Pin_0);\else \GPIO_ResetBits(GPIOB,GPIO_Pin_0)void GPIO_Config(void);#endif#include "gpio.h"/*** @brief 初始化GPIO* @param 无* @retval 无*/void GPIO_Config(void){/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启LED的外设时钟*/RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);}在main函数中检验Delay_us的执行时间#include "systick.h"#include "gpio.h"/**
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1DC电源插座图纸
  2. 0.67 MB   |  3次下载  |  免费
  3. 2AN-1267: 使用ADSP-CM408F ADC控制器的电机控制反馈采样时序
  4. 1.41MB   |  3次下载  |  免费
  5. 3AN158 GD32VW553 Wi-Fi开发指南
  6. 1.51MB   |  2次下载  |  免费
  7. 4AN148 GD32VW553射频硬件开发指南
  8. 2.07MB   |  1次下载  |  免费
  9. 5AN111-LTC3219用户指南
  10. 84.32KB   |  次下载  |  免费
  11. 6AN153-用于电源系统管理的Linduino
  12. 1.38MB   |  次下载  |  免费
  13. 7AN-283: Σ-Δ型ADC和DAC[中文版]
  14. 677.86KB   |  次下载  |  免费
  15. 8SM2018E 支持可控硅调光线性恒流控制芯片
  16. 402.24 KB  |  次下载  |  免费

本月

  1. 1ADI高性能电源管理解决方案
  2. 2.43 MB   |  450次下载  |  免费
  3. 2免费开源CC3D飞控资料(电路图&PCB源文件、BOM、
  4. 5.67 MB   |  138次下载  |  1 积分
  5. 3基于STM32单片机智能手环心率计步器体温显示设计
  6. 0.10 MB   |  130次下载  |  免费
  7. 4使用单片机实现七人表决器的程序和仿真资料免费下载
  8. 2.96 MB   |  44次下载  |  免费
  9. 5美的电磁炉维修手册大全
  10. 1.56 MB   |  24次下载  |  5 积分
  11. 6如何正确测试电源的纹波
  12. 0.36 MB   |  18次下载  |  免费
  13. 7感应笔电路图
  14. 0.06 MB   |  10次下载  |  免费
  15. 8万用表UT58A原理图
  16. 0.09 MB   |  9次下载  |  5 积分

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935121次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420062次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233088次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191367次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183335次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81581次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73810次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65988次下载  |  10 积分