Voila trois codes qui te seront utiles que j'ai fait il y a fort longtemps:
http://codes-sources.commentcamarc [...] seur-cpuid
http://codes-sources.commentcamarc [...] processeur
http://codes-sources.commentcamarc [...] processeur
Globalement
déjà c# n'est certainement pas bien adapté. Ensuite les WMI sont inappropriés car ils font la lecture des informations 'statiques' uniquement, hors, celle du CPU est dynamique.
Enfin, WMI c'est (de souvenir) du windows only, donc pas sur que ca se passe bien avec arduino puisqu'ils font en priorité le support amd/intel (logique).
Principe
pour la lecture CPU, il n'y a pas 36 choix, il faut passer par assembleur, il te faut donc tapper dans les cpuid bas niveau, et plus précisément rdtsc. D'ailleurs, rdtsc est réputé non fiable, CPU-Z utilise un autre indicateur (je ne sais plus lequel), mais je n'ai jamais réussit à lire cet indicateur... (et apparemment seul le mec de CPU-Z a réussit), la particularité de ce deuxième timer est d'être infiniment plus précis comparé à rdtsc, et il ne souffre pas d'erreur comme rdtsc.
Mais rdtsc, c'est ce que la plupart utilisent, et franchement ce sera suffisant
.
Ensuite, les timers (que ce soit rdtsc ou l'autre), aujourd'hui ne donnent plus la bonne valeur, uniquement la valeur du démarrage (comme wmi), c'est du au fait que le timer est devenu invariant sur demande de Microsoft semble-t-il. Il faut donc ajouter un complément: la lecture du coeff du processeur. Avec ces deux infos, tu auras la valeur réelle à 20MHz près environ, du CPU.
Pour ce qui est des t°. C'est encore pire, chaque processeur implémente son propre algo, pour les intels et les AMD ca se passe dans un registre appelé MSR. A la position 0x19c. Suivant l'architecture, tu n’interpréteras pas cette valeur de la même façon. Ce MSR s'appelle le Tj. C'est le delta entre 100° et la valeur du processeur.
Par exemple, un Tj de 40 indique que le processeur est à 60° actuellement.
Mais là ou ca devient compliqué: certains processeurs définissent le Tj à 75°, donc il faut savoir quel processeur est à quel Tj.
Pour rajouter un peu de piment, les MSR ne sont pas lisibles en ring3 ( http://fr.wikipedia.org/wiki/Anneau_de_protection ) mais uniquement en ring0, que ce soit sur linux ou windows (qui sont en ring3) il faut donc commencer par passer en ring0 (sous windows, j'utilisais l'excellent WinRing0.dll).
La deuxième solution (celle de CPU-Z par exemple), est d'utiliser un driver, puisque la particularité d'un driver est d'outrepasser le ring officiel de l'OS.
Voila j'espère avoir répondu à tes attentes, pour faire simple: a moins que ce soit crucial, ou que les codes fournis marchent déjà avec arduino, t'emmerde pas beaucoup avec ca c'est un domaine hautement complexe dans lequel il ne faut pas hésiter à lire des centaines de pages de docs technique d'intels & co, puisque ce n'est que là que tu trouveras l'infos nécessaire pour implémenter les algos.