时间短函数与 CPU 时间使用 RTEMS 操作系统
Time Short Functions with cpu time using RTEMS operating system
我希望在实时操作系统中分析一些代码,RTEMS
。本质上,rtems 有一堆函数来读取时间,其中最有用的是 rtems_clock_get_ticks_since_boot
.
这里的问题是,无论出于何种原因,报告的时钟周期与我们的状态机循环速率同步,5kHz
而处理器以大约 200MHz
(嵌入式系统)的速度运行。我知道这一点,因为我记录了时钟时间,等待了 1 秒,只经过了 5000 次滴答声。
所以问题是:
如何从 RTEMS 获取实际的 CPU 时钟周期?
附言。 来自 GNU C 的clock()
(有同样的问题)
我一直在研究一个指南,但我得到impossible constraint in asm
表明我需要使用一些不同的汇编程序关键字。也许有人可以指出我类似的东西?
上下文
我想分析一些代码,所以本质上:
start = cpu_clock_ticks()
//Some code
time = cpu_clock_ticks() - start;
代码在不到 0.125 毫秒的时间内运行,因此 clock()
和其他 rtems 函数获得的 8khz 计数器不会削减它。
可以使用示波器进行准确的性能测量,前提是存在软件可以写入的 GPIO、测试点或引脚(并且示波器探头可以连接到)。
这里的方法是向引脚发送脉冲。 o'scope可以设置为在脉冲上触发。 一些更智能的示波器可以对脉冲宽度进行统计,例如平均时间和最大时间。
在我们的嵌入式系统上,硬件团队非常友善,可以拿出 8 个测试点供我们使用。 我们将引脚初始化为零。 在要分析的代码的开头,我们将 1 写入引脚。 在分析代码的末尾,我们将 0 写入引脚。 这会产生脉冲或方波。
o'scope设置为在上升沿触发。 探头连接到引脚并运行程序。 调整o'scope,使整个脉冲在屏幕上可见。 重新运行程序。 当 o'scope 触发时,测量脉冲的宽度。 这将是执行的实际时间。
因此,解决此问题的是使用以下函数:
inline unsigned long timer_now() {
unsigned int time;
// The internal timer is accessed as special purpose register #268
// (@24.576 MHz => 1tick=4.069010416E-8 sec,~.04µs
asm volatile ("mfspr %0,268; sync" : "=r" (time));
return time;
}
timer_now
将返回仍未达到处理器速度但远快于8kHz的抽动,则可以将所花费的时间计算为tics * 0.04µs
。
注意:这可能仅适用于 powerPC MPC5200 BSP for rtems,因为它使用汇编程序例程。
在 RTEMS 4.11 或更高版本中,您可以使用 rtems_counter_read
来获取抽象特定于 CPU 的汇编代码的高精度计数器。请参阅:https://docs.rtems.org/doxygen/cpukit/html/group__ClassicCounter.html
像这样的RTEMS相关问题在提交给仅限订阅的用户邮件列表时总是得到更快,更准确的回答。
- 在C++中设置基于操作系统的文件路径
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- WideCharToMultiByte在英语操作系统上不转换日语
- 如何在 Windows 操作系统中在 geany 中安装插件
- 操作系统平台支持宏和提升库
- 从utsname找出Linux操作系统名称
- 为什么 free() 函数不将内存返回给操作系统?
- 我可以让编译器忽略特定于操作系统的方法吗?
- 有没有办法获取用户操作系统的ANSI转义码?
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 如何应用 printers.py 修改?(Linux操作系统)
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- 操作系统如何检测进程崩溃
- 检查操作系统兼容性
- 操作系统 (Linux) 在使用 boost::asio::generic::raw_protocol::socket
- 检测到由于操作系统内存不足而导致子进程终止
- 在Windows 10操作系统中扩展控制台
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 时间短函数与 CPU 时间使用 RTEMS 操作系统