Permítame explicarle algunos puntos a continuación: 1: Este valor 0X56000010 es la dirección física del registro GPBCON en el espacio de direcciones ARM (largo sin firmar*) 0X56000010 es un puntero que fuerza a esta dirección a ser de tipo largo* sin firmar. luego, en esto Agregar * antes del puntero significa eliminar la referencia al valor de esta dirección, lo cual es completamente consistente con la sintaxis del lenguaje C. Se agrega la palabra clave volátil para evitar que el compilador de C obtenga el valor de esta dirección. Esto es completamente consistente con la sintaxis del lenguaje C, donde se agrega la palabra clave volátil para evitar que el compilador de C optimice esta dirección. Cada acceso al valor de esta dirección debe pasar a través del bus y el valor no se puede obtener en un. buffer o registro. 2. sfr es solo la abreviatura en inglés de registro de función especial en aspectos integrados. No tiene otro significado. Incluso puedes olvidar por completo sfr en la vida, pero hay dos tipos de registros en los procesadores integrados: registros generales y registros de funciones especiales. Para responder a esta pregunta basándonos en el conocimiento de los microcontroladores de 8 bits, en ARM.R1-R15, podemos usar sfr, pero en ARM.R1-R15, podemos usar sfr, pero en ARM.R1-R15 en ARM. R1-R15, podemos usar sfr, pero en ARM.R1-R15, podemos usar sfr, R1-R15, podemos llamarlo registro general en ARM, R1-R15, la ejecución de instrucciones. Estos registros deben usarse Y los otros cientos o incluso miles de registros distribuidos en la dirección del bus pueden denominarse registros de función especial (sfr), pero nadie los llama así. Generalmente son registros de configuración de algunos controladores. , que no debe confundirse con los registros de propósito general, que no tienen direcciones y a los que se accede directamente mediante los nombres de R1-R15, mientras que a otros registros, como R1-R15, se puede acceder directamente. Los registros generales no tienen direcciones y se puede acceder a ellos directamente con nombres como R1-R15, mientras que a otros registros se debe acceder a través de direcciones, de ahí la definición de macro #define GPBCON anterior.
3. En lenguaje C, los registros con declaraciones se denominan variables de registro, es decir, las variables no se colocan en la memoria, sino en un registro general en R1-R10. Se convierte en una operación en los registros internos de la CPU sin acceder al bus, mejorando así la velocidad de acceso. De hecho, en la mayoría de los casos, el compilador de C no necesariamente muestra las variables declaradas en los registros. Las variables declaradas en el registro se muestran en el registro. El compilador seleccionará la variable apropiada como variable de registro según la arquitectura de la CPU a través de un algoritmo de optimización. Por lo tanto, agregar este registro en realidad no tiene ningún efecto. El compilador volatiliza esto Las palabras clave se vuelven necesarias porque algunas cosas no se pueden usar como registros. Por ejemplo, el valor en el registro de estado del hardware se actualiza según el estado del hardware, por lo que se debe acceder a la dirección correspondiente en el bus para leer el. valor.