J'ai un emploi à plein temps en tant qu'ingénieur firmware. On m'a récemment confié la tâche d'examiner les configurations GPIO et de modifier les paramètres selon les besoins. J'ai trouvé quelques broches mal configurées, donc naturellement je les ai reconfigurées, mais on m'a dit que je l'avais fait dans le mauvais ordre. Voici de quoi je parle:
Avant:
GPIO1.direction = INPUT;Après:
GPIO1.direction = OUTPUT;
GPIO1.value = 0;
Cependant, lors de la révision du code, on m'a dit que je devais changer l'ordre d'initialisation comme suit:
GPIO1.value = 0;
GPIO1.direction = OUTPUT;
En d'autres termes, définissez d'abord la valeur, puis définissez la direction de la broche. On m'a également dit que c'est ainsi que cela doit être sur les processeurs modernes car ils utilisent deux registres, un pour l'entrée et un pour la sortie, mais les anciens processeurs n'utilisent qu'un seul registre, donc l'ordre des opérations n'a pas d'importance.
(Remarque: moderne = ARM Cortex M3 et supérieur, ancien = Intel 8051)
J'ai demandé une meilleure explication au travail, mais je n'ai pas pu obtenir une bonne réponse. C'est pourquoi j'ai décidé de demander ici.
Donc, voici mes questions:
- Pourquoi l'ordre d'initialisation est-il important sur les nouveaux processeurs?
- Pourquoi l'ordre d'initialisation n'a-t-il pas d'importance sur les anciens processeurs?
- De quels registres parlent-ils dans les processeurs modernes?
- De quel registre unique parlent-ils sur les anciens processeurs?
Si quelqu'un pouvait fournir une sorte de diagramme, ce serait encore mieux.