This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430G2452:时间测量

Guru**** 2511985 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/669756/ccs-msp430g2452-time-measurement

器件型号:MSP430G2452

工具/软件:Code Composer Studio

您好!

我想测量执行某些功能所需的时间。 "time.h"中的函数 clock ()会使程序不会填充微控制器存储器。 还有其他方法吗? 我在 Code Composer Studio 中找到了一些测量时间的方法、但这不是我的意思。 我希望稍后显示测量结果。

此致、

容性

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Toann、

    另一种测量执行函数所需时间的方法是使用计时器。
    您可以配置计时器、在执行要测量的函数之前启动计时器、然后停止计时器并存储计时器计数。 之后、您可以通过将计时器计数、1/(时钟频率)和时钟预分频器相乘来进行数学运算、以获取时间。 请记住、您可以使用计时器进行计数的时钟周期数限制为2^16-1 = 65535、因为这是一个16位计时器。

    请告诉我此解决方案是否适合您、然后单击"Verify ansmwer"关闭此主题。 请随时提出其他问题。

    此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "我希望稍后显示测量结果。"

    简单。 启动计时器并使其自由运行。 使用该计时器对活动进行时间戳记。

    示例如下: github.com/.../MSP430G_F2

    请注意 SysTick .c/h 文件:它们使用计时器(在此特定示例中为 TA0)来提供时间戳。 您可以根据自己的应用轻松更改计时器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已经了解了 SysTick .c/h 和您发送的其他文件。 如果我在函数调用之前调用 SysTick _init(),然后在完成后调用 SysTick ()来启动计数器,这是否正确?
    我已经这样做了、然后我使用 Britta proposed 等式将结果相乘、我收到的结果如下:0.01095、0.00096、0.00157、这些数字是否太小?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先调用 SysTK_init(),但只调用一次。 然后调用 sysstick ()来进行时间戳活动。

    例如,如果要测量运行 func1()所需的时间:

    t0=systicks ();//开始时间戳
    func1();//执行某些操作
    T0 = SysTick ()- t0;//计算经历的时间

    SysTick ()是您的时间戳。 因此、您只需按原样使用它即可满足您的特定应用需求。

    两点:
    1) 1)您将需要启用中断;
    2) 2)定时器计数器可能会溢出。 我们在这里使用32位计时器。 因此请相应地选择您的预分频器(在 SysTick _init()中)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    由于我们再也听不到您的意见、我想这篇文章中的几篇文章和建议可以帮助您进一步测量函数执行时间。 我将关闭此主题、但请发布新的回复、重新打开、以防您对此主题有进一步的问题。
    此外、请单击"验证答案"以获取帮助您推进应用的解决方案。

    谢谢、此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否可以实现大于8x 的预调用器? 我尝试将 TMRA_PS16x 与 TMRA_PS1/2/4/8x 类似、但它不起作用。 我使用的是16MHz 时钟、需要能够进行高达200ms 的测量。 当我使用8x 预调用器时、我将会溢出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Toann、
    Timer_A 只允许1、2、4和8的预分频器(输入分频器)值(请见用户指南、第12.3.1节:Timer_A 控制寄存器)。
    如果您需要使用较低的频率运行定时器、您还可以通过在基本时钟模块+中设置相应的时钟分频器来降低时钟频率(即、如果您将 SMCLK 用于 Timer_A、它允许分频器值1、2、4和8)。 请注意,这会影响使用与 Timer_A 相同时钟的所有模块。 您可以在用户指南的第5.3节和小节中找到寄存器设置。

    这对您有何帮助?

    此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该计时器在预分频器中仅支持高达8倍的频率。

    计数器是32位的、因此它在2^32内溢出。 即使在1x 预分频器上、它也会在一个远远大于200ms 的时间段内溢出。