jueves, 21 de febrero de 2008

Prefacio - El porque de programar con HPGCC ?

Primeramente antes de empezar nuestra busqueda del santo grial de la hp, debemos comenzar entendiendo de que es lo que estamos buscando.

La programacion nativa de la Hp, en el caso nuestro el RPL del usuario (User RPL), es un lenguaje de programación básico de alto nivel, en donde se tiene una estructura facil de seguir, y es completamente imposible que produzcas un daño en la calculadora (claro siempre programando totalmente en User RPL), ademas que todos los comandos estan disponibles en la misma calculadora, y la misma calculadora sirve de compilador a la hora de programar.Pero al ser un lenguaje de alto nivel, el tiempo de ejecución se hace mas lento debido a que tiene que hacer una verificación de errores para comprobar de que no ha existido error en la ejecución del programa y no dañar el CPU, es algo parecido al Visual Basic, que cuando se realiza un programa mas o menos extenso, se puede notar sensiblemente alguna demora, a comparación de haber programado en otro lenguaje de mas bajo nivel, por ejemplo el C. Por otro lado, al programar en el RPL del Usuario solo tenemos acceso a un limitado conjunto de comandos, como quien diria solo los mas necesarios en las aplicaciones matemáticas y de ingeniería.

Para solucionar este problema (realmente problema) del tiempo de ejecución, los programadores eventuales de la hp, se decidieron por realizar programas en el RPL del sistema (System RPL), que es un lenguaje de mas bajo nivel que el User RPL, debido a que este lenguaje NO HACE VERIFICACIÓN DE ERRORES EN LA COMPILACIÓN, por lo tanto si haces un programa que sume dos números almacenados en la pila, y que al ejecutarlo no existan esos dos números en la pila, la calculadora, se puede decir que entrara en "shock" ya que le pediste que haga un trabajo y no habia con que hacer ese trabajo, y como no tiene detector de errores u otras instrucciones en caso de suceda ese problema no sabra que hacer, lo mandara todo al diablo, y reseteara en frio la calculadora, pudiendo perder los datos almacenados en el directorio HOME y los puertos no protegidos de la calculadora. Pero a cambio de este riesgo que supone programar en el RPL del sistema, obtenemos mas velocidad de lo que significaria programar en el RPL del usuario, y ademas un alcance mas amplio de los comandos que tiene la calculadora para programar, ya que el RPL del Usuario es un subconjunto del RPL del sistema, se prodria decir en un 25%. Ademas para poder programar en el sistema es necesario que tengas instalado un compilador extra, ya que la calculadora no compila los programas de manera natural como lo hace con el RPL del usuario, en este caso necesita un ayudita, como ser la libreria Jazz, o el EMACS (este es mi preferido) o en ultimo caso del debug4x, ademas de tener instalada la biblioteca de fuentes universales UFL.

Otro lenguaje de mas bajo nivel que los dos anteriores mencionados es el ML o lenguaje de máquina, programar en este lenguaje significa programar en el cerebro mismo de la calculadora, es como si quisieras adentrarte hasta la misma medula que controla todos los movimientos de la calculadora, evidentemente programar en este lenguaje significa, un dominio total de todo lo que significa el CPU interno, y una velocidad maxima a la que se podria aspirar con la calculadora, pero al mismo tiempo un sin fin de posibilidades de dañar la calculadora, ya que programar en ML es como si hicieras un transplante a corazon abierto, un mal pulso o mala punteria, chau paciente. También se necesita un compilador para poder hacer correr los programas.

Bueno hasta aqui todo lo que hemos hablado se aplica a todas las calculadoras de la serie Hp, pero con un pequeño pero decisivo detalle: Las calculadoras de la serie 48, y la calculadora 49g, tienen un chip procesador SATURNO, en cambio las calculadoras 49g+ y 50g, tienen un procesador ARM samsung S3C2410X-ARM9 (ARM920T),
( que para el que le interese, a mi no jejejeje, puede descargar su manual de aqui: http://www.mculand.com/sub1/mcu/arm9_device/pdf/um_s3c2410x.pdf )

Por lo tanto programar en ML Saturno, no tienen ningun sentido porque este es un chip ARM.

Entonces porque funcionan las calculadoras 49g+ y 50g como las demas anteriores?

La respuesta a esta interrogante es que hp hizo que el chip ARM simule ser un Saturno, dicho de otras palabras solo esta EMULANDO!!!, es como si tuvieramos un emulador de la calculadora en nuestro ordenador, pareciera que estubieramos manejando una calculadora de verdad, pero sabemos de antemano que solo es la emulación de una calculadora, que hagamos lo que hamos con esa calculadora nunca podremos arruinarla, porque el procesador con que funciona la calculadora emulada es el CPU del ordenador que solo emula ser una calculadora. Del mismo modo las calculadoras 49g+ y 50g, solo emulan ser un saturno que por lo expuesto anteriormente (que a mi juicio es solo flojera y tacañerio de la compañia Hp) no escribio un nuevo lenguaje para las nuevas calculadoras en el chip ARM.

Vaya entonces si con la emulación no tenemos ningun problema, porque querer programar en ARM?

-Una simple respuesta: La tecnología. Los Chip Saturno corren a 4 Mhz, y los modernos ARM son cronometreados por hp a 75 Mhz, osea mucho mas rapido, pero la velocidad real del procesador es mucho mas que 75 Mhz!!!!, ademas de ser tecnología de punta, porque no utilizarla al máximo?

Entonces como podemos programar en el chip ARM?, ya que emulando Saturno no podemos "tocar la medula" de estas nuevas calculadoras

-Pues la respuesta se da, gracias a Claudio Lapilli que logro que ahora podamos programar en el chip ARM, mediante HPGCC, que es un entorno de programación en donde podemos programar directamente en el chip ARM, utilizando para ello el lenguaje comercial para programacíon mas aceptado por todos en el mundo: EL LENGUAJE C. No entrare en detalles de como se logra ejecutar un programa hecho para el ARM, desde la emulación del Saturno, ese no es nuestro objetivo. Eso es un tema prohibido para nosotros, guerreros de la verdad!, solo debemos aceptar que eso se puede, y punto...

La ventaja de programar en C, es que en el internet se puede encontrar miles de documentos relacionados a como programar en este lenguaje, siempre teniendo cuidado de saber por adelantado que las librerias que son utilizadas por hpgcc NO PERTENECEN AL ANSI C, asi que si insertan comandos como conio.h, stdlib.h, stdio.h, etc, lo unico que lograremos es que nos produzca un error en la compilación (como en mis primeros dias, bueno aun considero que sigo en los primeros dias, pero un poquitin mas adelantado y pretendo llevar esta mi experiencia al que le sirva de algo). Ni que decir de los comandos relacionados con estas librerias, aunque algunos son los mismos que ANSI C, asi que a tener cuidado.

El proposito de esta entrada de blog, es poder proporcionar la experiencia que yo vaya adquiriendo en la programación en C de esta magnifica calculadora, para quien lo necesite de manera alguna, claro que hare algunos programas en User para poder comparar los resultados, las similitudes y diferencias en la forma de programar en ambos lenguajes, ademas la mayoria de los programas o todos, estaran orientados a la ingenieria civil.

Por ultimo decirles que yo no soy ningun programador de carrera, solo soy un eventual estudiante de Ingeniería Civil, que por azares del destino, un dia encontro la señal de que otro mundo si es posible... esa señal fue la calculadora Hp.

Saludos, es todo por hoy.