Ich habe einen Vollzeitjob als Firmware-Ingenieur. Vor kurzem wurde mir die Aufgabe übertragen, die GPIO-Konfigurationen zu überprüfen und die Einstellungen nach Bedarf zu ändern. Ich habe ein paar Pins gefunden, die falsch konfiguriert waren, also habe ich sie natürlich neu konfiguriert, aber mir wurde gesagt, dass ich es in der falschen Reihenfolge gemacht habe. Hier ist, wovon ich spreche:
Vorher:
GPIO1.direction = INPUT;
Nachher : GPIO1.direction = OUTPUT;
GPIO1.value = 0;
Während der Codeüberprüfung wurde mir jedoch mitgeteilt, dass die Reihenfolge der Initialisierung wie folgt geändert werden muss:
GPIO1.value = 0;
GPIO1.direction = OUTPUT;
Mit anderen Worten, stellen Sie zuerst den Wert und dann die Richtung des Stifts ein. Mir wurde auch gesagt, dass dies bei den modernen Prozessoren so sein muss, da sie zwei Register verwenden, eines für die Eingabe und eines für die Ausgabe, wobei jedoch alte Prozessoren nur ein Register verwenden, sodass die Reihenfolge der Operationen keine Rolle spielt.
(Hinweis: Modern = ARM Cortex M3 und höher, Alt = Intel 8051)
Ich bat um eine bessere Erklärung bei der Arbeit, aber ich konnte keine gute Antwort bekommen. Deshalb habe ich beschlossen, hier zu fragen.
Also hier sind meine Fragen:
- Warum spielt die Reihenfolge der Initialisierung bei den neuen Prozessoren eine Rolle?
- Warum spielt die Reihenfolge der Initialisierung bei den alten Prozessoren keine Rolle?
- Von welchen zwei Registern sprechen die modernen Prozessoren?
- Über welches einzelne Register sprechen sie auf den alten Prozessoren?
Wenn jemand eine Art Diagramm zur Verfügung stellen könnte, wäre das sogar noch besser.