Atmel studio coding [duplicado]

-5

Soy nuevo en atmel studio y quiero saber la mejor forma de codificar este ejemplo:
¿Cuál es la diferencia entre usar:

DDRG |= (1<<DDRG3)

vs

DDRG3 = 1

Editar : en los comentarios posteriores, el OP cambió su pregunta por:

"Podría modificar la pregunta para. ¿cuál es la mejor DDRG |= (1<<DDRG3) OR DDRG = 0x08 "

    
pregunta Ahmed Hassanein

1 respuesta

3

Respondiendo a su nueva versión de la pregunta:

  

lo que es mejor DDRG |= (1<<DDRG3) OR DDRG = 0x08

No hay "mejor" porque esos dos fragmentos 1 de C hacen cosas diferentes: solo tienen el mismo resultado final en una situación; en todas las demás situaciones, tendrán resultados finales diferentes . Esto significa que, como siempre en la programación, debe ser realmente claro lo que desea hacer y escribir su código en consecuencia.

1 [De ahora en adelante, asumiré que van seguidos de un punto y coma y llamaré a esas dos piezas de código "declaraciones C".]

a) DDRG = 0x08;

Esto claramente establece el bit 3 (el bit DDRG3 , valor 0x08) en el registro DDRG . Piense en qué valores se configuran para los otros bits en ese registro? Todos están configurados a cero .

b) DDRG |= (1<<DDRG3);

Esto lee el valor que esté configurado actualmente en el registro DDRG , establece el bit 3 (asumiendo que DDRG3 = 3 ) y escribe este resultado de nuevo en el registro DDRG . Piense en qué valores se configuran para los otros bits en ese registro? Todos ellos no han cambiado desde sus valores anteriores .

[Un compilador de optimización, al reconocer que codifica idiom , podría usar una instrucción de ensamblaje adecuada, si existe, para establecer ese bit en el registro DDRG, sin necesidad de haga la lectura-modificación-escritura implícita en el código fuente de C: el resultado final es el mismo de cualquier manera.]

Entonces, como puede ver ahora, la única vez que esas dos declaraciones tienen el mismo resultado final, es cuando los otros bits (utilizados) en DDRG están ya establecidos en cero antes de que se ejecutaran cada una de esas dos declaraciones.

El uso de DDRG |= (1<<DDRG3); sugiere al lector (¡quién podría ser usted, tratando de mantener el código algunos años más tarde!) que le preocupa conservar los otros bits establecidos en ese registro. Tenga en cuenta que usar un operador OR a nivel de bit como este, es tan común que Atmel lo utiliza en su hoja de datos ATmega128A con respecto a la configuración de bits en los registros GPIO, por ejemplo.

Mientras que usar DDRG = 0x08; sugiere que desea borrar específicamente cualquier otro bit que se establezca en ese registro, en el momento en que establece el bit 3.

Cuál de las declaraciones que debe usar, depende de exactamente del resultado que desea obtener, para el valor en el registro DDRG .

He usado la página 134 de esta Hoja de datos de Atmel ATmega128A para confirme la disposición del registro DDRG y el valor de bit DDRG3, 0x08, dentro de ese registro. Para otras MCU, la interpretación puede ser diferente.
respondido por el SamGibson

Lea otras preguntas en las etiquetas