PIC32 ejecutando un programa desde la RAM

5

¿Se pregunta si alguien ha intentado ejecutar un programa completo en un PIC32 sin RAM? ¿Cómo podría uno hacer eso? Entiendo que puede usar la palabra clave ramfunc para mover ciertas funciones a la RAM, sin embargo, aún requieren que la copia esté en Flash.

Lo que me gustaría hacer es tener un programa de carga en el PIC32 que pueda aceptar un archivo hexadecimal a través del puerto serie, etc. y, en lugar de escribirlo en flash, se quede sin memoria RAM directamente.

Idealmente, esperaba que al modificar la secuencia de comandos del vinculador por defecto se pudiera dirigir a un programa para que se ejecute desde la RAM o, si alguien sabe cómo podemos parchear un programa que estaba vinculado para que se ejecute desde flash hasta que se ejecute desde la RAM, también podría funcionar

Gracias Mike

    
pregunta Mike Snyder

2 respuestas

4

Los atributos longramfunc y ramfunc ubican la función en un área especial de flash que se copiará en la RAM mediante el código de inicio. No quieres usarlos.

Para las funciones que se llamarán desde flash, desea usar el atributo longcall que especifica que se necesita una llamada de 32 bits (JALR) en lugar de una llamada de 28 bits (JAL), ya que flash y RAM se encuentran en Separe los segmentos de 512MB.

También deberá configurar un archivo de vinculador personalizado con una sección de RAM ejecutable e incluir ese nombre de sección en cada función que se encuentre allí.

La macro longramfunc también incluye el atributo longcall, mientras que la macro ramfunc no, y está destinada a llamadas de una función de RAM a otra. En su caso, para las funciones llamadas por otras funciones de RAM, no desea utilizar el atributo ramfunc porque configura la copia desde flash.

Dado que usted mismo copiará las funciones (por ejemplo, fuera de una tarjeta SD), deberá incluir su propio cargador que interpreta el código hexadecimal y copia los datos para que parpadeen según sea necesario.

    
respondido por el tcrosley
1

Tiene tres soluciones básicas para su problema de querer descargar programas para ejecutarse después de actualizar la pieza.

  1. Use un lenguaje interpretado como Lua, Basic o Forth. Escriba (o, más probablemente, simplemente conecte) una máquina virtual existente que interprete las instrucciones de texto en lugar del código de la máquina, y descargue el programa como texto. Tienes que volver a implementar tu programa en el lenguaje interpretado, pero eso es más rápido y más fácil (especialmente en Lua) que escribirlo en C.
  2. Solo obtenga un poco de almacenamiento adicional y vuelva a flashear toda la parte. No ha descrito lo que está haciendo, así que no puedo saber si esto es aplicable, pero es bastante fácil agregar un IC Flash en serie y / o una tarjeta microSD con mucho espacio de almacenamiento en su tablero y hacer que el cargador de arranque seleccione una perfil para ejecutar. En una vida de Flash de 10,000 reescrituras, esto le otorga 27 años de reclasificaciones una vez por día.
  3. Haz lo que originalmente pretendías. Esto requerirá una programación cuidadosa (consulte la respuesta de tcrosley para conocer algunos métodos necesarios) y algunos scripts de vinculador sofisticados. Buena suerte.

Adaptado en gran medida de mi respuesta a 'Compilar código para ejecutar desde RAM externa' ; Un problema similar.

    
respondido por el Kevin Vermeer

Lea otras preguntas en las etiquetas