ATSAM3N Cortex-M3 RAM Banding Bit

0

Si no utilizo la función de bandas de bits en ATSAM3N, esta región, ¿la utilizará el compilador para el programa? ¿O se quedará sin usar?

¿Qué pasa si mi programa, al azar (por sí mismo) debería asignar y acceder a esta región?

    
pregunta MrBit

2 respuestas

3

El enlazador controlado por un script de enlace (no el compilador), coloca las variables y el código en ubicaciones de memoria específicas. Normalmente, la secuencia de comandos del vinculador no intenta colocar variables o códigos, dentro de las regiones de la banda de bits.

Entonces, a menos que escriba un guión de línea para colocar algo explícitamente en los rangos de direcciones de las regiones de banda de bits, el enlazador normalmente no colocará nada allí.

Sin embargo, esas regiones son solo 'superposiciones'; la banda de bits solo proporciona un rango de direcciones alternativo para acceder a la RAM o periféricos a los que ya se puede acceder con sus propias direcciones "reales". Las regiones de la banda de bits no proporcionan ningún almacenamiento extra , solo un mecanismo de acceso diferente, por lo que, en mi humilde opinión, es un poco confuso preguntar "¿O no se utilizará?".

Dicho de otra manera, el compilador + vinculador puede usar toda la RAM disponible, independientemente de usar direcciones de banda de bits para acceder a ella. El direccionamiento de banda de bits solo es un hardware de direccionamiento adicional.

El direccionamiento de banda de bits se utiliza para acceder a los registros periféricos o RAM como bits individuales. Esto puede ser muy útil para implementar un acceso atómico de bits o un acceso más rápido a bits individuales, por ejemplo, para controlar los pines conectados a los puertos.

Cada dirección de banda de bits contiene un valor de 1 bit. Así que son útiles para los valores booleanos, pero poco más.

La forma fácil de aprovechar la funcionalidad de banda de bits para probar o actualizar bits dentro de la RAM o periféricos es a través de C / C ++. La documentación de ARM y los libros de J.Yiu explican cómo explotar el direccionamiento de banda de bits; establezca el valor del puntero int (32 bits) sin firmar en una dirección dentro del rango de la banda de bits, por ejemplo,
volatile uint32_t GPIOA_BASE = (uint32_t*) 0x40010800; (no es la dirección correcta de la banda de bits)

Luego, cualquier acceso a la memoria o registros periféricos a través de una variable de puntero correctamente inicializada realmente leerá o escribirá un solo bit dentro de la RAM real o el registro periférico:
*GPIOA_BASE = 1; // set bit to true

    
respondido por el gbulmer
0

Según el capítulo 6.7 en "La guía definitiva para los procesadores ARM Cortex M3 / M4" de J.Yiu, hay dos regiones de memoria que también son regiones de banda de bits. Ambos se pueden usar como memoria normal o accediendo a bits individuales a través del alias de banda de bits.
Además, el uso de la función de banda de bits requiere un código de ensamblaje o apuntar explícitamente a la dirección de banda alias cuando se usa C / C ++. Los compiladores C o C ++ no usarán el alias de banda de otra manera y, por lo tanto, el uso de bandas de bits es la opción de los programadores. El enlazador posiblemente podría usar la región de banda de bits como SRAM normal o memoria de periféricos.

    
respondido por el Grebu

Lea otras preguntas en las etiquetas