Dans l'article précédent, nous avons été capables d'afficher à l'écran une image, traitée par l'application Gimp et intégrée à notre code. Mais si vous avez reproduit ces essais, en particulier avec une image d'une dimension non négligeable, vous avez sans le moindre doute remarqué un petit problème de performances. Si nous voulons utiliser le framebuffer de façon acceptable, nous devons régler ce problème.
La première chose à faire pour améliorer la situation consiste à mesurer l'étendue du problème. Or, à ce stade, nos fonctions utilitaires sont très limitées. Nous n'avons, en particulier, absolument rien qui nous permette de mesurer une durée ou même de temporiser le code avec un délai quelconque. Certes, la configuration de l'UART (miniUART) inclut une petite boucle de NOP (No OPeration), mais ceci est bien insuffisant.
1. Mesurons le problème
Le SoC Broadcom contient de nombreux périphériques et parmi eux se trouvent plusieurs timers, constitués de compteurs cadencés par un signal d'horloge. L'un d'entre eux, le System Timer est précisément conçu pour nos besoins puisqu'il est cadencé à 1 MHz (avec donc une période d’une microseconde). La datasheet du BCM2835 [1] nous apprend, en page 172, que ce timer utilise un compteur (free running counter) de 64 bits dont la valeur est accessible via deux registres. Nous avons donc sous la main un compteur...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première