【问题标题】:Benchmarking on CMSIS RTOS Cortex M-33CMSIS RTOS Cortex M-33 基准测试
【发布时间】:2022-12-21 23:47:29
【问题描述】:

我正在尝试使用 CMSIS RTOS 对 Cortex M33 上的功能持续时间进行计时。我目前正在直接从 ARM_CM_DWT_CYCCNT 寄存器读取周期。

这是有效的,但我想知道我是否可以做任何其他事情来提高测量的精度/方差? IE。限制中断等?

一些第三方代码包括 int_lock()int_unlock(lock) 的使用,但我找不到任何关于此用法的 CMSIS RTOS 文档。

【问题讨论】:

  • 如果可以,请禁用中断。它不会造成伤害,并且可能有助于使结果更加精确。我假设这就是 int_lock()int_unlock(lock) 所做的。
  • 如果您不知道他们做什么(即没有访问权限或文档或来源),那么最好避免使用它们。即使凭直觉你“知道”他们在做什么。有用于此的 CMSIS 原语,但如果您只是查看 CMSIS RTOS,那么您找错地方了。它们在 CMSIS CORE 中。

标签: arm benchmarking rtos cmsis


【解决方案1】:

您的“第三方”例程很可能是 CPSR 操作的某种包装器。直觉上我希望将代码部分包装在:

lock_handle = int_lock() ; 
... 
int_unlock( lock_handle );

但是声明这些的头文件可能会很清楚。甚至可能提供来源。总而言之,如果这些函数没有被充分记录,或者您无法访问源代码以查看它们的行为方式,您最好避免使用它们。

CMSIS RTOS 不提供禁用中断或实现临界区的功能。一般来说,如果您的应用程序需要临界区,那么您的设计就失败了。然而,更普遍的是,CMSIS(不仅仅是 RTOS)具有 NVIC APINVIC_DisableIRQ()NVIC_EnableIRQ() 函数来启用/禁用单个中断(如果 SYSTICK 之类的中断对您的基准测试至关重要)。

全局禁用所有中断的方法是CMSIS Core的一部分,它定义了__disable_irq()__enable_irq()

第三方启用/禁用函数可能会提供句柄以确保启用和禁用正确配对,或者可能提供嵌套计数器,以便只有嵌套禁用的外部启用才能重新启用中断。这些都是使用可用的 CMSIS 基元实现的所有机制,但在您的情况下可能不需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2022-11-08
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多