首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每100微秒测量一次例行IAR (用于STM8)的时间

每100微秒测量一次例行IAR (用于STM8)的时间
EN

Stack Overflow用户
提问于 2016-12-05 00:19:23
回答 2查看 1.2K关注 0票数 3

我正在使用嵌入式IAR在C中维护一些用于STM8的代码。如何测量代码的一个部分和另一个部分之间的执行时间?(考虑到如果可能的话,我不想停止代码的执行(一个断点)或写入控制台(因为我发现这严重影响了程序的时间)。

我发现了类似于这个测量运行时间的技术的东西

但是这通常是针对ARM处理器的,所以很多方法都不适用于我的设置。我在想像第三种技术可能适用.

具体来说,我是问我能不能做些类似的事情

代码语言:javascript
复制
unsigned int cnt1 = 0;
unsigned int cnt2 = 0;

    cnt1 = TIM3->CNT;
    func();
    cnt2 = TIM3->CNT; 
    printf("cnt1:%u cnt2:%u diff:%u \n",cnt1,cnt2,cnt2-cnt1);

对于这个微控制器

任何帮助都非常感谢

EN

回答 2

Stack Overflow用户

发布于 2016-12-05 12:06:04

您不能在8位微处理器中调用每个100 no的printf,因为它没有吞吐量。相反,每次发生意外行为时都会增加状态变量。

代码语言:javascript
复制
unsigned int cnt1 = 0;
unsigned int cnt2 = 0;

cnt1 = TIM3->CNT;
func();
cnt2 = TIM3->CNT; 
if ((cnt2 - cnt1) > MAX_DURATION_ALLOWED)
    global_error_func_duration ++;

(确保TIM3计数以微秒为单位)

代码语言:javascript
复制
CLK_PeripheralClockConfig (CLK_PERIPHERAL_TIMER3 , ENABLE);     
TIM3_DeInit();
TIM3_TimeBaseInit(/* Fill these parameters to get 1us counts at your CPU clock */);
TIM3_Cmd(ENABLE); 

现在,您可以创建一个控制台函数来打印这个变量,因此您可以不时地检查单个循环是否占用了10 so以上。

在开发的后期,您将希望监视这些状态变量,以评估系统运行时的完整性,并在发生不当行为时采取一些措施。

票数 1
EN

Stack Overflow用户

发布于 2016-12-05 00:53:34

有很多解决方案,但是简单的解决方案是在你想开始/停止测量时间的地方使用硬件引脚和切换引脚,使用示波器或一些廉价的逻辑分析器。正如有人提到的,软件有一些可变的开始和结束,给它们分配当前的计时器,并在调试中读取它们。您可以在运行时使用i.UART打印它们,但这会减慢它们的速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40965356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档