6

I am working on a ARM cortex M4 evaluation board, its a bare metal application without any operating system running on it.

Now I want to measure CPU usage of a given process/algorithm , what would be the best way to do so?

Should i implement an operating system to measure the CPU usage that have the functionality for such demand?

4

3 回答 3

6

这个问题几乎可以自己回答。当您的裸机应用程序不在该进程/算法中时,它在做什么?测量一个或另一个或两者。如果你有一个裸机应用程序没有完全消耗这个算法中的 cpu,那么你已经有一个操作系统来管理这个应用程序/函数的时间。您可以在相对于计时器的循环中使用简单计数器中的多种方法来查看当算法获得时间片时每个循环有多少计数。您可以简单地为算法本身计时,等等。

我假设当您说 CPU 时,您的意思是整个系统,因为您的性能在很大程度上取决于您的代码及其正在与之交谈的内容。如果根据时钟频率从 cortex-m4 上的闪存运行,您可能会烧毁处理器周期,只是等待指令或数据(并且当算法不是烧毁时钟时,很容易得到算法的处理器性能的错误概念)。缓存掩盖/操纵该性能,如果您不小心并意识到它们在做什么,它们很容易极大地影响性能。作为一个 C++ 问题,您的编译器在性能和代码方面起着重要作用,当然,可以很容易地使代码运行速度快或慢几倍,而对命令行或代码的更改最少。

如果算法是 isr 的一部分,那么处理器会进入睡眠状态,否则,您可以使用 gpio 引脚和示波器技术来了解运行与睡眠的比率。

于 2013-07-14T17:38:07.253 回答
4

实现一个操作系统来测量 CPU 的空闲时间对我来说似乎有点过度设计。据我所知,Cortex-M4 包含一个调试单元 (DWT),可让您对周期计数器进行快照。但最简单的方法是将引脚连接到示波器并在算法的进入和退出时切换它。

于 2013-07-14T16:36:17.100 回答
1

首先,为了仅测量性能,实现一个操作系统是不切实际的,甚至是不可能的。因此,一种可能的方法是保留一个计数变量,该变量将记录在该持续时间内发生的滴答数。并在定时器中断时增加该变量。

于 2013-07-14T16:38:29.423 回答