Ho un lavoro a tempo pieno come ingegnere del firmware. Recentemente mi è stato assegnato un compito di rivedere le configurazioni GPIO e modificare le impostazioni secondo necessità. Ho trovato alcuni pin che sono stati configurati in modo errato, quindi naturalmente li ho riconfigurati, tuttavia mi è stato detto che l'ho fatto nell'ordine sbagliato. Ecco di cosa sto parlando:
Prima:
GPIO1.direction = INPUT;Dopo:
GPIO1.direction = OUTPUT;
GPIO1.value = 0;
Tuttavia durante la revisione del codice mi è stato detto che devo cambiare l'ordine di inizializzazione nel modo seguente:
GPIO1.value = 0;
GPIO1.direction = OUTPUT;
In altre parole, imposta prima il valore e poi imposta la direzione del pin. Mi è stato anche detto che è così che deve essere sui processori moderni perché usano due registri, uno per l'input e uno per l'output, tuttavia i vecchi processori usano solo un registro, quindi l'ordine delle operazioni non avrebbe importanza.
(Nota: moderno = ARM Cortex M3 e versioni successive, vecchio = Intel 8051)
Ho chiesto una spiegazione migliore al lavoro, ma non sono riuscito a ottenere una buona risposta. Ecco perché ho deciso di chiedere qui.
Quindi, ecco le mie domande:
- Perché l'ordine di inizializzazione è importante per i nuovi processori?
- Perché l'ordine di inizializzazione non ha importanza per i vecchi processori?
- Di quali due registri stanno parlando nei moderni processori?
- Di quale registro unico stanno parlando sui vecchi processori?
Se qualcuno potesse fornire una sorta di diagramma, sarebbe ancora meglio.