¿Puedo usar una tarjeta SD como ROM para mi microcontrolador? ¿Qué otras opciones hay si quiero una gran cantidad de memoria ROM (barata)?
Respuestas
¿Demasiados anuncios?Así que depende de lo que quieras hacer. Como regla general: si estás dispuesto a correr lo suficientemente lento, puede hacer lo que diablos quiere.
En los microcontroladores (como una foto o un procesador ATMega (no incluidos los PIC32 o Atmel los procesadores ARM)) normalmente tienen una Arquitectura Harvard que significa que el código y los datos se almacenan en diferentes partes de la memoria y acceder de manera diferente. Esto significa que si tienes que cargar una pieza de código de una tarjeta SD, va a ser en la RAM, y usted no será capaz de tratar como código sin algunas acrobacias. Usted puede escribir la información cargada al código interno de los bancos (que es como gestores de arranque en el trabajo), pero, esencialmente, usted nunca será capaz de tener más código cargado de lo que el microcontrolador inicia con el código de los límites de tamaño. Ahora, usted podría (con un poco de esfuerzo) escribir el especial de "la llamada" y "retorno" de las funciones del código que esencialmente eran las funciones que carga la dirección de la tarjeta SD y escribir en el código interno de los bancos y, a continuación, llamar a la recién cargada código. Esto requiere que cada función que tenía era más pequeño que el código interno de los bancos, pero eso no iba a ser duro. La parte difícil sería que esto podría causar un montón de desgaste de las secciones del código de memoria en el chip, que son, a menudo, sólo nominal para ~100,000 escribe (o como se menciona a continuación, tan bajo como 10,000 escribe!).
En la mayoría de Von Neumann la arquitectura (e Híbridos de harvard) máquinas (ARM, Mips, y x86, así como los demás), los datos y las instrucciones son intercambiables. Esto significa que usted puede mucho más fácil escribir código para cargar las instrucciones de la tarjeta SD y en la memoria ram y, a continuación, empezar a correr. Si usted no tiene tanta RAM como tienes el código (que, partiendo de su premisa original suena raro), entonces usted tendrá que hacer algunas cosas difíciles a cualquiera de llamar varias veces para cargar desde la tarjeta SD en la memoria RAM, igual que el ejemplo anterior llamados a cargar desde la tarjeta SD en la memoria del programa.
Si usted tiene una de Von Neumann la arquitectura y la suerte de tener un microcontrolador con una unidad de administración de memoria o algún tipo de software definido por el mecanismo de paginación (yo creo que tiene esto ahora, pero no sé lo que es), entonces usted puede comenzar la aplicación de la memoria virtual de los conceptos. Te voy a poner todo el código en la memoria RAM, y la página de código en la tarjeta SD. Esto es muy complejo si no se ha implementado en su microcontrolador, así que no voy a ir a través de explicar a menos que piensen que esto es lo que su planificación a hacer (voy a tener que mirar algunos de los BRAZO de software basado en la paginación de los mecanismos con el fin de ayudar). Esto requiere la menor cantidad de cambios en su código inicial, pero que esencialmente requiere un sistema operativo en la parte superior de su código para manejar el código de la página de interruptores.
Espero que ayude!
EDITAR:
Como muchos han mencionado en los comentarios de abajo, tal vez su mejor apuesta es construir un intérprete que recopila las instrucciones de la tarjeta SD y las ejecuta mediante código en la ROM interna. Esto funciona tanto para la universidad de Harvard y Von Neumann arquitecturas, como tienes el código, que es permanente, que ejecuta la base de datos de la tarjeta SD. Existen varias implementaciones de este ya en existencia: véase el Basic Stamp o NanoVM para algunos puntos de partida. Entiendo que esto, por supuesto, siempre de ser bastante lenta. Y si usted no desea utilizar un pre-hechos, ejemplo de esto usted va a ser sorprendido haciendo su propio compilador/tokenizer así como el intérprete, lo que llevará a un montón de complicadas depuración. Ventajas de esto es que una vez que tienen todo el trabajo que usted puede llevar a su intérprete a cualquier arquitectura y usted estará listo para ir muy rápido!
Mientras difícil de trabajar, hay situaciones en las que la "superposición" de la técnica utilizada una vez en el pasado de la computación podría ser viable.
Típicamente, que consistió explícitamente intercambio funcionales importantes fracciones de un programa en la limitada memoria RAM desde el disco a su vez que fue necesario para los diversos modos distintos de funcionamiento. Mientras que el "lento" en comparación con el dedicado a la memoria de programa, sdcards son órdenes de magnitud más rápido que las unidades de disquete con el que la técnica se utiliza a menudo - especialmente en el modo de lectura.
En un grado sustancial, moderno memoria virtual es una especie de automática, a menudo casi invisible aplicación de esta idea - mucho más fácil trabajar con, pero que requieren de soporte de hardware.
El problema con la explícita técnica de superposición es que usted necesita para ser capaz de dividir el programa en varios, en gran medida autónomo piezas, o al menos los que sólo han interactivo de dependencia en la parte fija del programa, pero no en la otra. Por lo tanto, sería más adecuado para que se usan ocasionalmente extras, plug-ins, etc de las características que debe constantemente ser utilizado en rápida o entrelazado de la secuencia.