Autor Tema: Java para dsPIC!!  (Leído 4764 veces)

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

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Java para dsPIC!!
« en: 01 de Abril de 2008, 06:03:26 »
Hola a todos

Estoy trabajando hace unas semanas en una JVM ( maquina virtual de java ) para dspic. La idea es poder utiliar un lenguaje orientado a objetos para nuestras aplicaciones con dsPIC.

Todos hemos oido alguna vez eso de que el java es un lenguaje interpretado y que necesita de una JVM para funcionar. Cuando escribimos un programa en Java y lo compilamos el compilador genera el .class, un archivo que contiene el programa en codigo ensamblador y alguna informacion mas para depurar el programa ( nombres de variables, posiciones del PC donde podemos poner breakpoints...). El codigo ensamblador que se genera no es compatible con el juego de instrucciones de nuestro PC o nuestro PIC, y es JVM la que se encarga de leer cada instruccion y ejecutar las instrucciones correspondientes.

El programa ya funciona y se puede usar para probar programas java con muchas limitaciones, pero ya iremos haciendolo cada vez mas y mas funcional...

La info mas interesante la podeis encontrar en:
picoJava-II Programmers Reference manual ( http://www.sun.com/software/communitysource/processors/download_picojava.xml )
http://www.hio.hen.nl/~vanleeuw/pse/vmspec.pdf

Un programa muy util para decodificar los .class
www.classfileinspector.com


Este es un ejemplo xa comprobar la de la JVM.

//javacode.txt
package javaapplication3;

public class Main {

    public static void main(String[] args) {
        // Test variable declaration
        long i = 0, j = 0;
        // Test variable operations
        i = 10;
        j = i + 2;
        j = i * 2;
        j = i / 2;
        // Test bucle for
        for (i = 0, j = 0; i < 3; i++) {
            j = i * 3;
        }
        // Test bucle while
        j = 8;
        while (i != 0) {
            j /= 2;
            i--;
        }

        // Test bucle do-while
        j = 0;
        do {
            i++;
            j += i;
        } while (i < 3);

        for (i = 0; i < 10; i++) {
            // Test if-else if-else sentence
            if (i == 0) {
                j = 0;
            } else if (i == 1) {
                j = 5;
            } else if (i == 2) {
                j = 10;
            } else if (i == 3) {
                j = 15;
            } else if (i == 4) {
                j = 20;
            } else {

                // Test switch sentence
                switch ((int)i) {
                    case 5:
                        j = 25;
                        break;
                    case 6:
                        j = 30;
                        break;
                    case 7:
                        j = 35;
                        break;
                    case 8:
                        j = 40;
                        break;
                    default:
                        j = 45;
                        break;
                }
            }
        }
    }
}

Os adjunto el codigo del proyecto, si quereis probar como funciona, poner un breakpoint en la linea 391 del picJava-II.c
         case lstore_0 :            /*0x3f   lstore_0*/
         case lstore_1 :            /*0x40   lstore_1*/
         case lstore_2 :            /*0x41   lstore_2*/
         case lstore_3 :            /*0x42   lstore_3*/      
            n = mem[PC] - lstore_0;
            //long_64( stack[32-(VARS - n)] ) = long_64( stack[32-(OPTOP - 2)] );// ERROR at picoJava-II.pdf or VMspec.pdf
            long_64( stack[32-(VARS - n)] ) = long_64( stack[32-(OPTOP + 2)] ); //Corrected code, similar to dstore_n
>>BREAKPOINT>>>>OPTOP += 2;
            PC++;
            break;
y correr el programa. Visualizar el array stack[] entero y podreis ir viendo como van apareciendo los valores 10, 12, 20, 5 en un elemento del stack[](que corresponderia a la variable j)...

Si quereis compilar un nuevo programa, utilizar el netbeans para generar el .class, convertir el .class a HEX e introducirlo como datos en mem[] (opcodes.h).

Espero que os guste...saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Java para dsPIC!!
« Respuesta #1 en: 01 de Abril de 2008, 06:55:14 »
Me parece muy interesante, a la vez que inalcanzable para un profano en estos menesteres como yo.

De todas formas, si quiero montarlo, ¿qué hardware necesito?, ¿cuál es el esquema?

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Java para dsPIC!!
« Respuesta #2 en: 01 de Abril de 2008, 11:47:17 »
De momento el unico hardware que necesita es un dsPIC/dsPIC33, ni memoria externa, ni puertos especificos de IO, ni nada de nada... La forma probar este proyecto es usando el MPLAB como depurador, e ir observando el codigo en Java (javacode.txt) y todo lo que el programa va haciendo para ejecutarlo sobre el dsPIC...

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Java para dsPIC!!
« Respuesta #3 en: 01 de Abril de 2008, 12:26:46 »
Hola Jgpeiro06:

Muy interesante el proyecto. Algunas preguntas:
¿Cuanto ocupa la JVM en el dsPIC?
¿Cuál es su performance?

Me acuerdo haber leido en el libro "Organización de Computadoras Un Enfoque Estructurado" de Tanenbaum como implementar un microprocesador de picoJAVA. ¿Estás usando ese libro para el proyecto?

Saludos
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Java para dsPIC!!
« Respuesta #4 en: 01 de Abril de 2008, 12:42:13 »
Os felicito por el proyecto, y amí también me interesa saber cuánto ocupa en el dsPic.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Java para dsPIC!!
« Respuesta #5 en: 01 de Abril de 2008, 18:09:49 »
No estoy usando ese libro, pero la info necesaria la encontre en el picoJava-II programmers reference manual, un documento que nombro en el primer post.
Ahora mismo el proyecto ocupa 10K de memoria de programa y 1k de ram (el dsPIC33 incorpora 96k de programa y 32 de ram).

El programa que cito en el primer post, compilado en C cn el MPLAB C30 requiere 1700 instrucciones para ejecutarse. Este mismo programa, compilado en java con el netbeans e interpretado con esta JVM requiere 75000. Mas o menos es 50 veces mas lento el java interpretado...La eficiencia de la JVM aumenta cuando se usan librerias previamente compiladas en C( como las matematicas x ejemplo) e incluso creo que el java permite añadir codigo escrito en otros lenguajes...

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Java para dsPIC!!
« Respuesta #6 en: 01 de Abril de 2008, 18:35:49 »
¡Gracias Jgpeiro06!

Muy interesante el proyecto sobre todo por usar el Netbeans como IDE y por llevar la JVM a un entorno tan limitado como un microcontrolador.
Ya tengo este hilo en mis favoritos.

Saludos
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Java para dsPIC!!
« Respuesta #7 en: 02 de Abril de 2008, 10:37:00 »
Zaphyrus, el IDE que uso es el MPLAB, el compilador de C es el MPLAB C30. El Netbeans lo uso para compilar el programa en java que quiera usar.

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Java para dsPIC!!
« Respuesta #8 en: 02 de Abril de 2008, 10:50:58 »
Perdón, me expresé mal. Entiendo que desarrolles la JVM en Mplab y en C30. Me refería al beneficio de poder programar en JAVA en el Netbeans para obtener el .class para luego ejecutarlo en el PIC con la JVM que estas desarrollando.
Me parece interesante porque es como el BASIC STAMP pero con un muy buen lenguaje como JAVA, salvando las diferencias de lo que es interpretado y una máquina virtual.
Desde acá felicitarte y darte ánimos para que continues desarrollando y posteando las novedades.

Saludos.

PD: Estuve viendo que también estuviste desarrollando un PSpice para PIC. La verdad que admiro tu dedicación y entusiasmo.
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Java para dsPIC!!
« Respuesta #9 en: 04 de Abril de 2008, 10:56:49 »
Las llamadas a funciones:
ha llegado la hora de probar subir un nivel, despues de comprobar que ya se pueden ejecutar programillas con varios tipos de datos primitivos y varios tipos de sentencias, ha llegado la hora de probar funciones.
Cuando compilo un programa simple de una o dos funciones, despues de cargar los argumentos necesarios se utiliza la instruccion invokevirtual, asi que debe ser un "call".
Existen al menos 4 instrucciones, pero no se ni que hace exactamenete cada una, ni sus diferencias... las instrucciones son
    invokeinterface
    invokespecial
    invokestatic
    invokevirtual
en http://en.wikipedia.org/wiki/Java_bytecode podemos leer un poco sobre su funcion, pero no me basta... quizas si alguien que conozca el java pueda decirme que significan cada una...

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Java para dsPIC!!
« Respuesta #10 en: 04 de Abril de 2008, 11:51:30 »
Buenísimo!!! La JVM va tomando forma.
Lamento no poder ayudarte porque mis conocimientos en Java son básicos.
Podes preguntar en el foro de Java Hispano o en el foro de Paneta Código que seguro que te puede ayudar con el tema.

Saludos
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina