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/CC2650STK:如何在运行 TI RTOS 时测量代码执行时间?

Guru**** 2595800 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/613703/ccs-cc2650stk-how-can-i-measure-the-code-execution-time-when-i-run-ti-rtos

器件型号:CC2650STK

工具/软件:Code Composer Studio

大家好、我尝试过配置文件时钟、但运行 TI RTOS 时似乎不起作用、您能告诉我在使用 TI RTOS 时如何测量2个断点之间的经历时间吗?

此外、时间有多精确? 我尝试使用 GP 计时器来测量时间、但如果 CCS 能够为我提供准确的时间、那将是最好的

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

    您是否正在寻找可编程运行时间测量(例如、您的代码正在调用 API 来确定执行时间)? 如果是、请查看 xdc.runtime.Timestamp 模块: rtsc.eclipse.org/.../Timestamp.html

    如果您要讨论 CCS 测量、我将 Ping 该团队以回答该主题。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果要使用 CCS 对从一个断点到另一个断点的周期进行计数、可以使用事件计数器:
    downloads.ti.com/.../

    上面的链接适用于 CC13x0、但事件计数器在 cc26x0上的工作方式也相同。

    谢谢
    Ki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助、我使用 task_sleep (1000)函数测试了这些时间戳 API、但是、getFreq API 始终返回65536、task_sleep (1000)读取0.01s 的执行时间。
    我不认为有必要详细介绍这一点、所以在测量其他代码执行时间时、我可以将此结果用作参考吗? 或者、我必须修改这里是否存在严重错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jason、

    我们在.cfg 文件中将时钟模块默认为10us、因此 task_sleep (1000)应为10ms。 您正在使用哪个 getFreq API ...Timestam_getFreq? 您是否有一个可以附加的小示例项目? 此外、您使用的软件版本是什么?

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

    我使用了 Timestam_getFreq、我使用了 IAR ARM8.11.2、下面是示例代码:

    Time1=Timestamp_get32
    SA_audioDSP (PCMsamples1、yfil);//测量 DSP 执行时间
    time2=Timestamp_get32 ();
    Timestamp_getFreq (&Freq); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此主题介绍65336频率: e2e.ti.com/.../513031
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我对.cfg 文件中的10us 有疑问、这是仅涉及 task_sleep (1000)(这意味着 task_sleep (1000)的运行速度比应有的快100倍)的节拍周期。 或者整个系统时钟不再是1/48MHz、因为您在.cfg 文件中默认了节拍周期?

    此外、如果我在  xdc.runtime,sometime 模块中使用函数 Timestamp_get64、我得到了值3200171710、我认为这是因为值溢出、对吗?

    再次感谢你的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    时钟周期对 CPU 频率没有影响。 它仅供内核用于计时(Task_sleep、Semphore_pend)。 等)。

    时间戳模块可能会发生计时器换行。 我们处理换行、64位不应长时间换行。 3200171710是十六进制的0xbebebebe、这是我们初始化系统和任务堆栈的值(因此我们可以找到峰值)。 Timestamp_get64的值0xbebebe 非常可疑! 是否有任何未初始化的变量?

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

    感谢您的帮助、我以以下方式使用了 XDC 时间模块(我不知道您的意思是"未使用值"?):

    xdc_runtime_Types_Timestamp64 timer_start;
    xdc_runtime_Types_Timestamp64 timer_stop;
    Timestamp_get64 (&timer_start);
    //在此处执行某些
    操作 Timestamp_get64 (&timer_stop);
    

    有时是 timer_stop 3200171710

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于系统堆栈和任务堆栈、在内核在使用它们之前会将所有堆栈内存设置为0xbebebe。 通过这种方法、我们可以查看堆栈顶部以查看是否已熔断。 我们还可以从堆栈顶部开始、查看非0xbebebe 值。 这将是 ROV 中显示的堆栈峰值。

    Todd