Autor Tema: Interpretador de instrucciones en C30  (Leído 2247 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Interpretador de instrucciones en C30
« en: 01 de Agosto de 2011, 21:54:56 »
Hola gente me presento para que me vallan conociendo ya que soy bastante nuevo por aquí mi nombre es Andrés y soy estudiante de secuendaria el año que viene ya universidad en electrónica y en mi casa le sigo dedicando mas que nada a los fabulosos PIC  :mrgreen:.
Siempre me quedé con las ganas de poder expandir facilmente mis programas sin que existiera un límite en la memoria del PIC, todo esto me llevaba a ejecutarlos desde la RAM que por desgracia en el arquitectura Harvard esto no es posible y los unicos PIC capaces de hacer esto son los PIC32. Entonces se me ocurrió hacer un interpretador de instrucciones que leería de una memoria EEPROM, uSD, FLASH lo que fuere externa, lo grabarían en RAM y las decodificaría para ejecutarlas.
Por supuesto que esto haría mas lento a nuestro PIC pero nos permitiría una memoria ilimitada o al menos en teoría.

Recurro a ustedes que saben mas de estos temas si es posible realizar algo así que vendría a ser como la Virtual Machine que utiliza Java. La idea sería hacerlo con algún dsPIC o 24F ya que tienen velocidades considerables y una memoria RAM aceptable sin tener que pasar a los PIC32. Hay algo que impida que esto funcione ? Se que no es nada facil pero mi idea era hacer un código facilmente adaptable que pudieramos usar en toda la gama 24F,30F y 33F porque no siempre se necesita tanta velocidad sino mucho código (me ha pasado).

Espero sus comentarios y ojala salga algo  :D

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Interpretador de instrucciones en C30
« Respuesta #1 en: 01 de Agosto de 2011, 22:17:29 »
Hola, no conozco la arquitectura PIC, por lo que entendí, no se de donde ejecutarías tu programa de expansión, ya que como comentas no se puede ejecutar de RAM, si haces funcionar un expansor ( eepron, sd, etc, etc ) no se me ocurre como hacer que se ejecute desde ahi. Con respecto a expandir, mi opinión es que los MCU ( microcontroladores ) están diseñados para un rango de aplicaciones, si te quedas corto si o si tenes que saltar a un micro con mas capacidad o un cambio de familia. Si todo eso no te alcanza ya tenes saltar a un microprocesador o un microcontrolador que permita sacar los buses afuera, como creo que en la familia MicroChip son los PIC24, lamentablemente no todos los fabricantes tienen familias que permitan esto. Aunque parezca que esto sea necesario y nunca pase en el mundo real, hay casos de que si, hace 10 años trabaje en una multinacional que fabricaba equipos con un firmware de aproximadamente 100.000 lineas de código C, se usaba un 8051 ( famila Atmel ) y como tenias la posilibilidad de sacar los buses de datos y dirrecciones, externamente se colocaba una RAM externa de 128Kbytes y una EPROM de 512K bytes. Con respecto a lo de Java, te tiro algunas puntas para investigar, lo más sencillo de implementar son las llamadas "maquinas de stack", podes leer sobre eso y sobre Forth, un excelente lenguaje de programación. Java trabaja asi pero su máquina virtual es sumamente poderosa, posiblemente sea la mejor maquina virtual jamas implementada. También podes leer sobre RPN ( notacion polaca inversa ) muy util para implementar maquinas de stack.

Saludos !
« Última modificación: 01 de Agosto de 2011, 22:21:58 por RICHI777 »

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Interpretador de instrucciones en C30
« Respuesta #2 en: 01 de Agosto de 2011, 22:24:00 »
Gracias RICHI777 la forma de expandir sería leer el programa de otra memoria RAM mas grande y cargarlo en RAM y desde ahi con un programa en la FLASH del PIC interpretar lo que halla en la RAM y ejecutar la instrucción correspondiente sería digamos lo que hace el PIC con el OPCODE y todo el proceso de decodificación de las instrucciones pero echo vía software enotnces vos solo tenes que cambiar el programa en la otra memoria FLASH,EEPROM,uSD sin tocar la FLASH del PIC ya que solo interpreta lo que vos le mandas el truco sería ir diciendole que bloques del programa debe ir copiando ya que la RAM no es infinita, que mantenga en RAM lo que necesite no se si me explique...

Gracias por el interes  ;-)
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Interpretador de instrucciones en C30
« Respuesta #3 en: 01 de Agosto de 2011, 22:30:29 »
Creo que entendí, la idea es leer el programa desde un dispositivo externo, vos pusiste una RAM, pero podría ser otra tipo de memoria, y de ahí cargarlo en la RAM interna del micro y ejecutarlo, con lo cual se puede ejecutar desde la RAM interna del micro ?

Saludos !

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Interpretador de instrucciones en C30
« Respuesta #4 en: 01 de Agosto de 2011, 22:38:23 »
Claro la idea sería así para que quede mas claro:

1) Copio el programa que leo desde una EEPROM o uSD conectada mediante SPI,CAN,I2C,USART,PSP a la RAM interna del PIC
2) Dentro del PIC un programa grabado en su FLASH interpretar lo que hay grabado en la RAM y lo decodifica a instrucciones

Luego habría que hacer que alguna instruccion en especial le indique que parte de la memoria debe leer ahora por ejemplo si se ejecutara el return de una función debería elminar ese programa y volver a cargar el programa que tenía anteriormente.

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Interpretador de instrucciones en C30
« Respuesta #5 en: 01 de Agosto de 2011, 23:56:13 »
Entiendo, igual me parece una cosa bastante complicada.

Saludos !

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Interpretador de instrucciones en C30
« Respuesta #6 en: 02 de Agosto de 2011, 00:06:20 »
Por casualidad queres implementar algo parecido al Pyxis OS que corre sobre Arduino ?

Saludos !

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Interpretador de instrucciones en C30
« Respuesta #7 en: 02 de Agosto de 2011, 08:18:56 »
Exactamente esa es la idea pero bueno sin la necesidad de un RTOS simplemente esa característica.

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Interpretador de instrucciones en C30
« Respuesta #8 en: 02 de Septiembre de 2011, 07:35:09 »
Podes albergar en la EEPROM código para una máquina de pila (http://es.wikipedia.org/wiki/M%C3%A1quina_de_pila).
Por ejemplo, el código para la instrucción PUSH es 1, para SUMAR es un 2, y para POP es 3. PUSH y POP requieren argumento: un numero de registro.
El código para sumar los registros 4 y 5, y luego guardar el resultado en el registro 13 sería así:
Código: ASM
  1. PUSH 4  ; apilamos el contenido del registro 4
  2.         PUSH 5  ; apilamos el contenido del registro 5
  3.         SUMAR ; esta instrucción suma los objetos en la cima de la pila
  4.         POP 13     ; esta instrucción vuelca la cima de la pila a un registro
Podes implementar operaciones más complejas, saltos, etc.
Compilado quedaría así (código máquina):
   
Código: C
  1. 1 4 1 5 2 3
Y el interprete en C seria de este modo:
   
Código: C
  1. pc = 0; /* contador de programa */
  2.         unsigned char pila[16];
  3.         int p=0; /* puntero a la pila */
  4.         for(;;) {
  5.                 i = leer_instruccion(pc++);
  6.                 switch(pc) {
  7.                 case 1: // instrucción PUSH
  8.                         pila[p++] = leer_dato(pc++);
  9.                         break;
  10.                 case 2: // sumar
  11.                         --p;
  12.                         pila[p-1] += pila[p];
  13.                         break;
  14.                 case 3: // pop
  15.                         *((unsigned char *)(leer_dato(pc++))) = pila[--p];
  16.                 }
  17.         }
Si necesitas ayuda, este es un compilador completo y funcional, con código fuente documentado en español: http://www.todopic.com.ar/foros/index.php?topic=35889.
@fabianjsm is on twitter

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Interpretador de instrucciones en C30
« Respuesta #9 en: 02 de Septiembre de 2011, 10:52:41 »
Gracias fabianjsm muy útil tu información porque podría grabar un pequeño programa en C en la FLASH e ir tomando de otro lado las instrucciones y ponerlas en RAM para usarlas.
El único inconveniente es que con ése método no podría usar cualquier compilador de C sino uno que debería buscar que me genere ese tipo de código. Lo que debería hacer es ver como funciona el HEX que se graba en la memoria del PIC para de ahí interpretar las instrucciones.

Saludos !
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder