GOOGLE ADS

martes, 26 de abril de 2022

¿Cómo almacenar un espacio de direcciones no inicializado para el almacenamiento de datos en DTCM en código ensamblador (ARM-v7, STMCubeIDE)?

Tengo algunos datos inicializados que almaceno en la .datasección. Luego uso el espacio de direcciones no inicializado usando la .bsssección. Tengo el DTCM habilitado y puedo almacenar y leer datos desde allí __attribute__((section(".dtcm")))cuando están escritos en código C, y esto confirma que mi secuencia de comandos del enlazador está configurada correctamente. Sin embargo, no sé cuál es la expresión equivalente para usar el espacio de direcciones en el código ensamblador. No quiero almacenar toda la .bsssección en DTCM, solo un subconjunto de datos a los que deseo tener un acceso más rápido. ¿Cómo se hace esto?

¿Existe un documento autorizado para la codificación de ensamblado ARM ASM? Lo he usado hasta ahora y ha sido muy útil, pero no cubre mi caso en general y la memoria estrechamente acoplada en particular.

FWIW, esto es para un STM32H745.


Solución del problema

En primer lugar, tenga en cuenta que la .bsssección está inicializada en cero, no sin inicializar.

En ensamblado puedes escribir .section.dtcm. Dado que este no es un nombre de sección estándar, probablemente debería establecer las banderas para que el enlazador sepa a qué tipo de segmento se puede asignar la sección, por ejemplo:.section.dtcm, "aw", %nobits

Querrá leer el GNU como manual para obtener detalles de la .sectiondirectiva.

Esta publicación de blog de la comunidad ARM también puede ser útil.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...