Estaba leyendo sobre la serie ARM M y en alguna parte se escribió que: "el área de la memoria flash es un alias de dirección 0x0000 0000". ¿Qué significa?
Estaba leyendo sobre la serie ARM M y en alguna parte se escribió que: "el área de la memoria flash es un alias de dirección 0x0000 0000". ¿Qué significa?
Un sistema de microprocesador típico funciona al hacer que una CPU envíe una dirección al subsistema de memoria junto con una solicitud de lectura o una solicitud de escritura que contenga una parte de los datos que se escribirán. Varios otros dispositivos en el sistema verán las direcciones enviadas desde la CPU, decidirán si son "interesantes" y reaccionarán en consecuencia.
Un subsistema de memoria típico tendrá una entrada de dirección junto con algunas entradas de control y una entrada y salida de datos. La lógica de alguna interfaz buscará que la CPU genere direcciones que coincidan con ciertos criterios y, si se observan dichas direcciones, le indicará a la memoria que debe leerlas o escribirlas (el subsistema de memoria recibirá la parte inferior de la dirección, que utilizará para seleccionar un byte o palabra individual).
Si un sistema tiene 64KB de memoria asignada desde 0x08000000-0x0800FFFF y la solicitud de problemas de CPU para escribir 0x99 a 0x08001234, entonces la memoria procesará eso como una solicitud para escribir 0x1234. Si la memoria también estuviera conectada para responder a las direcciones 0x00000000-0x0000FFFF (lo que podría lograrse simplemente con su lógica de interfaz ignorar bit 27 de la dirección), entonces una solicitud de la CPU para leer la dirección 0x00001234 sería ser visto por la memoria como una solicitud para leer 0x1234 (la ubicación que se escribió anteriormente).
En muchos casos, la memoria en sí no sabrá o le importará que la escritura se haya realizado en una dirección diferente a la de la lectura. Simplemente ve una escritura a lo que considera como dirección 0x1234 y una lectura de esa misma dirección.
En Cortex-M, el procesador siempre se inicia leyendo el puntero de la pila desde la dirección 0x00000000, y la tabla de vectores comienza en 0x00000004. La documentación que está leyendo aquí se referirá a una implementación del procesador, ya que afecta al sistema de memoria (no al procesador).
Dependiendo de cómo esté organizado el diseño con el gestor de arranque y el código principal, podría ser posible "reasignar" el mapa de memoria después del arranque. Esto podría, por ejemplo, darle una manera de cambiar los vectores de interrupción. Por lo general, antes de cambiar la configuración de los decodificadores de dirección, se ramificaría a la dirección "nueva" de su código. Para hacer esto más fácil, dos direcciones de memoria diferentes pueden asignarse a la misma memoria física (esto desperdicia espacio de direcciones, pero hay "suficiente" con 1Gb de espacio de código en estos dispositivos).