Bonsoir,
beaucoup de problèmes de performance résultent d'une programmation calamiteuse. Un double coeur ne changera rien si on fait n'importe quoi.
Il faut en particulier éviter toutes les temporisations bloquantes, où le processeur ne fait rien d'autre qu'attendre, un signal I2C, One-Wire, le résultat d'une conversion... Sans OS, il faut appeler les différentes tâches cycliquement, faire en sorte que chacune rende la main assez vite, même si elle n'est pas terminée, quitte à se continuer après. Quelques interruptions pour les besoins de timings précis, et si possible utiliser le DMA pour certains périphériques. Donc, pour résumer, bannir toutes les appels à des fonctions "delay()". Et dont usent et abusent les librairies simples.
Il ne faut bien sûr pas se priver de prendre des composants performants, la différence de prix est souvent faible, mais cela ne dispense pas de coder proprement.
La gestion d'un port I2C, d'un UART, d'un bus spi ne demande que quelques dizaines de lignes de code, que quelques centaines d'instructions. Avec un processeur tournant entre 10 et 100MHz, cela ne représente que quelques microsecondes. Largement de quoi faire des tas d'autres choses. Mais si un transfert I2C de 100 bits à 100kHz se fait en bloquant le processeur, on le bloque pendant 1ms, soit 0.1% du temps disponible. Que le processeur tourne à 1 ou 100MHz ne changera alors rien. Si on fait des dizaines d'accès par seconde, plus quelques autres bricoles, le processeur est très vite à genou...