Mesure de l’utilisation du processeur sur un système à arm nu

Je travaille sur une carte d’évaluation ARM cortex M4 , une application sans système d’exploitation, sans aucun système d’exploitation.

Maintenant, je veux mesurer CPU utilisation du CPU d’un processus / algorithme donné, quel serait le meilleur moyen de le faire?

Devrais-je mettre en place un système d’exploitation pour mesurer l’utilisation du CPU capable de répondre à cette demande?

La question se répond presque toute seule. Que fait votre application «bare metal» quand elle ne fait pas partie de ce processus / algorithme? Mesurer l’un ou l’autre ou les deux. Si vous avez une application «nu metal» qui ne consum pas complètement le processeur de cet algorithme, vous disposez déjà d’un système d’exploitation dans la mesure où vous gérez le temps de cette application / fonction. Vous pouvez utiliser un certain nombre de méthodes à partir d’un simple compteur dans une boucle par rapport à un minuteur pour voir le nombre de comptages par boucle lorsque l’algorithme obtient des tranches de temps par rapport à non. Vous pouvez simplement chronométrer l’algorithme lui-même, etc.

Je suppose que lorsque vous parlez de processeur, vous entendez l’ensemble du système, car vos performances dépendent fortement de votre code et de son contenu. Si vous utilisez Flash cortex-m4 en fonction de la fréquence d’horloge, vous pouvez peut-être graver des cycles de processeur en attente d’instructions ou de données (et vous pouvez très facilement vous faire une idée fausse des performances du processeur pour un algorithme sans l’algorithme de gravure d’horloges). Les caches masquent / manipulent cette performance et peuvent facilement l’affecter considérablement si vous ne faites pas attention et ne savez pas ce qu’ils font. En tant que question C ++, votre compilateur joue un rôle important dans les performances, tout comme votre code. Il peut très facilement rendre le code exécuté plusieurs fois plus rapidement ou plus lentement avec des modifications minimes de la ligne de commande ou du code.

Si l’algorithme fait partie d’un isr, le processeur se met en veille sinon, vous pouvez utiliser la technologie pin et scope de gpio pour avoir une idée du rapport entre le rapport cours / veille et le rapport cours / temps.

Implémenter un système d’exploitation pour mesurer le temps d’inactivité d’un processeur me semble un peu trop sophistiqué. À ma connaissance, le Cortex-M4 comprend une unité de débogage (DWT) qui vous permet de capturer un compteur de cycles . Mais le plus simple serait d’attacher une broche à un oscilloscope et de la basculer entre entrée et sortie de votre algorithme.

Tout d’abord, la mise en œuvre d’un système d’exploitation ne sera ni pratique ni même possible dans le seul but de mesurer les performances. Ainsi, une approche possible consiste à conserver une variable de comptage qui enregistre le nombre de ticks survenus jusqu’à cette durée. Et incrémentez cette variable dans une interruption du minuteur.