J'ai un isr qui met à jour un affichage à une fréquence fixe. Je voudrais ajuster ma routine pour minimiser les frais généraux et garder autant de temps processeur possible que possible pour d'autres traitements, mais je n'ai pas de bon moyen de collecter des mesures pour déterminer ma charge processeur.
Je pourrais regarder l'assemblage et analyser la routine, mais je n'ai pas la patience ou la capacité de le faire avec précision. Je ne pense pas non plus avoir besoin de résultats extrêmement fins, juste un simple pourcentage de temps processeur occupé par l'isr.
Je pourrais placer une broche haute uniquement lorsque l'isr est actif et la mesurer à l'extérieur. Cela a un minimum de frais généraux dans le code, mais je ne sais pas avec quoi le mesurer. Je n'ai pas d'oscilloscope ou quelque chose comme ça. Existe-t-il un ic simple ou un moyen facile d'utiliser un autre micro pour mesurer le rapport cyclique? J'ai entendu parler de puces de compteur de fréquence dédiées, mais y a-t-il quelque chose pour le rapport cyclique?
la source
Définissez une broche de sortie lorsque vous entrez dans l'ISR et effacez-la avant de revenir. Filtrez la sortie avec un filtre RC. La tension aux bornes du condensateur devrait vous donner le rapport cyclique ISR.
Par exemple, si votre alimentation est de 3,3 V et que vous mesurez 33 mV, vous passez 1% du temps dans l'ISR.
la source
La façon la plus simple de procéder consiste à exécuter le code dans le simulateur et à mesurer les cycles pris par la routine d'interruption. Le simulateur Microchip MPLAB, par exemple, dispose d'une fonction chronomètre pratique qui est très utile à cet effet.
À défaut, lever une épingle au début de l'interruption et la baisser à la fin peut aider. La façon la plus simple de voir cela est avec un oscilloscope. Si vous faites des projets de microcontrôleur et d'électronique, vous devriez en obtenir un de toute façon.
Sans lunette, vous pouvez simplement filtrer passe-bas la tension des broches, puis la mesurer avec un voltmètre. Cette tension divisée par la tension d'alimentation du processeur vous donnera la fraction du temps où la broche est élevée. Par exemple, si le processeur fonctionne sur 3,3 V et que la tension de la broche filtrée passe-bas est de 800 mV, la broche est élevée à 800 mV / 3,3 V = 24% du temps.
Comme vous utilisez apparemment un compilateur, vous devez quelque peu déclasser cette réponse. Le compilateur ajoute probablement un code d'entrée d'interruption avant l'exécution de votre code et un code de sortie d'interruption après l'exécution de votre code. Le vrai temps d'interruption s'étendra sur quelques cycles de chaque côté de l'impulsion. Bien sûr, si vous vous souciez du timing des interruptions, vous ne devriez pas utiliser un compilateur en premier lieu.
la source