La placa RT 1020 usa 64K "SRAM_DTC" para almacenar datos .bss, mi aplicación requiere más

Estoy intentando portar mi aplicación a una placa NXP (RT 1020) .

Entiendo que esta placa no tiene flash interno y, por lo tanto, funciona desde SRAM. Utiliza "SRAM_DTC" (datos estrechamente acoplados) y "SRAM_ITC" (instrucción estrechamente acoplada) para gestionar esto.

En MCUXpresso puedo ver el diseño de la memoria:

ingrese la descripción de la imagen aquí

Cuando compilo mi aplicación, el enlazador da un error al mencionar que la sección .bss no encajará en su sección SRAM_DTC.

región 'SRAM_DTC' desbordada por 12172 bytes

Estoy tratando de entender si esta sección "SRAM_DTC" es obligatoria para ejecutar mi aplicación en este tablero. Intenté simplemente eliminar la sección SRAM_DTC y ejecutar la aplicación, pero eso no se compilará en MCUXpresso:

tablero/tablero.c:198: referencia indefinida a `__base_NCACHE_REGION'

Cuando también elimino NCACHE_REGION en la configuración de la memoria, la placa ya no se inicia. Puedo recuperarme de eso siguiendo los pasos de solución de problemas aquí .

Leí todo lo que pude encontrar sobre este tema de SRAM_DTC/ITC/OC. Todavía no puedo descifrar si puedo "mover" la sección .bss a algún lugar en SRAM externo.

Mis preguntas:

  • ¿Alguien puede confirmar (o negar) si es posible resolver mi problema moviendo la sección .bss de "SRAM_DTC" a "BOARD_RAM"?
  • ¿Es esto factible desde Xpresso (los scripts de vinculación se generan para mí, no puedo hacer ajustes hasta donde yo sé)?

Algunos antecedentes que encontré en SRAM_DTC/ITC/OC aquí y aquí .

No tengo experiencia directa con su tablero, sin embargo, debería poder cambiar la configuración del enlazador para colocar varias áreas de memoria en otro lugar. Tenga en cuenta que debe asegurarse de que su código de inicio haya configurado el controlador de memoria externo para que esté operativo. Además, el rendimiento será mucho más lento y puede haber problemas de reordenación que NXP no reconoce demasiado (al menos con el RT1062).

Respuestas (1)

Para aquellos que estén interesados ​​en el mismo tema y tengan dificultades para encontrar documentación:

Aquí se explica mucha información de DTC/ITC: https://www.nxp.com/docs/en/application-note/AN12077.pdf

De hecho, DTC está optimizado para datos, mientras que ITC está optimizado para instrucciones. Todavía no he encontrado documentación definitiva que afirme que ITC solo se debe usar para el código que se ejecuta desde SRAM.

En mi caso, mi aplicación necesitaba más DTC SRAM que los 64 KB predeterminados disponibles.

Por lo tanto, eventualmente seguí este manual: https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/Reallocating-the-FlexRAM/ta-p/1117649

Escribiendo en 3 registros diferentes se puede cambiar la configuración de la memoria. Cambié mi configuración de memoria a 0B ITC, 192KB DTC y (el mínimo permitido) 64KB para OC.

El OC se usa para su cargador de arranque predeterminado, por lo tanto, no se puede eliminar por completo.