jump to navigation

Nueva Versión 0.0.4 12 noviembre, 2006

Posted by pjmicrocontroladores in Información general, Parches.
add a comment

Publico una nueva versión en la que podremos ver la mentalidad número 3 mentada en la publicación anterior. Por lo tanto, tenemos ahora 32 registros más el W que permiten un funcionamiento completo de la compilación. Se pueden realizar copias, sumas y restas en variables de 1 byte.

 

Hay tres niveles de especificación de modo de operando cuya diferencia es el tamaño de palabra. El modo QI es de 1 byte y corresponde a variables de tipo char o short. El modo HI de 2 bytes y corresponde a enteros y el modo SI de 4 bytes y usado para long. No tiene sentido (aunque se podría) aumentar los modos de operación dado que en un PIC usar más de 4 bytes para un dato es realmente improbable. Por lo tanto solo se usarán estos tres modos en la definición de la arquitectura, pero de usarse modos mayores, no hay problema dado que si GCC no encuentra una operación en la especificación de la máquina para un tipo mayor, usará una librería (conocida como libgcc) para crear las operaciones necesarias a partir de las existentes.

 

Por ahora el desarrollo será dirigido al modo QI de 1 byte. La extensión a otros modos se realizará en posteriores fases de desarrollo a partir de lo hecho para el modo QI. Además en lo que respecta al uso de W como registro, por el momento solo le veo problemas, por lo que cuando lo valore a fondo será usado o excluido definitivamente.

 

Hasta pronto.

Nuevo Parche 0.0.3 9 noviembre, 2006

Posted by pjmicrocontroladores in Información general, Parches.
add a comment

Por problemas de salud no he hecho todo lo que quería, pero por lo menos me ahorro el pinchazo de la vacuna de la gripe :).

Bien, subido un nuevo parche que esta vez consigue crear el CC1 que compila código. No se cuelga sino que informa de lo que le falta para seguir compilando. Con esto, basta con rellenar lo que pide para seguir adelante. Llegados a este punto ahora si tenemos que fijar una idea del objetivo del porting a crear. Pese a que quería documentar más a fondo las ideas existentes, las resumo aquí y dejo la promesa de explicar la definitiva más adelante.

El motivo de tener varias ideas es GCC. Este tiene sus más y sus menos en las arquitecturas y en principio esta orientado a modelos de memoria más grandes que un microcontrolador. En un PIC como el 16F877 tenemos 352 posiciones de RAM. En ellas tienes que entrar la pila y el espacio de memoria local de cada función entre otros parámetros. Esto sumado a que el espacio no es continuo sino dividido en 4 bancos hace la gestión de memoria complicada. Además tenemos un solo registro, el W, pero toda la memoria puede accederse de manera directa, por lo que se podría pensar que tenemos 352 registros más uno. Todo esto lleva a tres modelos de memoria – registros cuya elección final lo dará el código generado por GCC. Obviamente será el más eficiente.

Los tres modos de memoria son:

1) Un solo registro, el W y todo lo demás es memoria. Pros: el código es más fácil y GCC traduce las instrucciones a un solo nemotécnico por instrucción. Contras: GCC trabaja con infinitos registros, optimiza, y después establece estos registros en registros reales, pasando los que no puede recargar a la pila o memoria. Con un solo registro no se como funcionará esto, ya que la mayoría serán pasados a memoria o pila y por omisión parece que GCC siempre elije registros a memoria, por lo que se formaría el circulo vicioso.

2) Todo son registros, menos lo mínimamente necesario para que GCC tenga memoria. Pros: se acerca a la idea de GCC de muchos registros. Contras: GCC quiere memoria, según que programa compile se pedirá más o menos. Ajustar esto en tiempo de compilación es complicado desde ya, imaginaos cuando lo hagamos. Según la documentación de GCC, éste usará un espacio de memoria al que llama “frame” (marco), con un puntero que será (o puede ser) reasignado en cada llamada para ajustarse a necesidades. Esto lleva a no poder usar toda la memoria como registros y con ello a la idea 3.

3) Habrá x registros, y el resto es memoria a usar. Pros: Con esto llegamos a una solución de compromiso entre 1 y 2. Contras: pues suponiendo que usemos un banco para pila, y otro para registros, quedan dos bancos para memoria. Esto lleva a moverse entre dos bancos, lo que no es ni eficiente, ni fácil.

Pues de estas ideas primero escogí la número 1, para definir la estructura del porting, pero cada vez más veo más negro su futuro. De escoger la siguiente idea cogería la 3, pero comenzaría con un solo banco para memoria de frame y dejaría los otros para registros y pila (en un futuro ya buscaría optimizar memoria). Con esto retraso la gestión de memoria hasta que el porting sea funcional, con lo que alivio la complejidad del trabajo.

Sin más hasta pronto.

Documentación 6 noviembre, 2006

Posted by pjmicrocontroladores in Información general.
add a comment

Con el post ¿Qué es un microcontrolador? inicio una nueva categoría dentro del blog, la categoría “Documentación”. En esta categoría se presentarán artículos míos o enlaces de especial interés a documentación sobre el mundo PIC, GCC o temas vinculantes.

Iré poco a poco en especialización de la documentación hasta llegar a temas más interesantes.

Por otro lado se ha subido un nuevo pre-alfa, que ahora si hace algo más interesante, llega a crear el cc1 con el que podemos pasar código C a ensamblador. Pero por ahora hace algo más gracioso, cuelga el ordenador o captura todos los recursos del mismo. Para la próxima entrega supongo que lo solucionaré. Además cuando lo consiga documentaré la forma de compilar la imagen y usar las herramientas externas.

La idea del proyecto está en una encarnizada lucha de tres frentes distintos, pero el esqueleto de compilación no influye en las mismas por lo que en estos momentos me dedico a conseguir un compilador que intente compilar e indique los fallos (no en uno que se cuelgue :)).

Si para la próxima entrega no tengo una idea vencedora os expondré las tres.

¿Que es un microcontrolador? 6 noviembre, 2006

Posted by pjmicrocontroladores in Documentación.
26 comments

Un microcontrolador es un circuito integrado que nos ofrece las posibilidades de un pequeño computador. En su interior encontramos un procesador, memoria, y varios periféricos. El secreto de los microcontroladores lo encontramos en su tamaño, su precio y su diversidad. Su valor medio de seis euros, y su tamaño se reduce a unos pocos centímetros cuadrados. 

El párrafo anterior es la forma correcta de definirlos, o al menos la forma más generalizada, dado que a través de Internet, es la manera principal que encontramos, con distintos matices, de explicar que es un microcontrolador. Pero en este texto, presumiblemente orientado a entendidos en el tema como mínimo, usaremos una definición alternativa por dos motivos, uno por que los que sepan algo de microcontroladores no van a leer esta sección y dos por que los que no saben, con la definición anterior, no entenderán la idea que rodea a un microcontrolador. 

Un microcontrolador es una máquina tonta, un objeto sin razonamiento ninguno, un cubo negro con patitas metálicas que se suelda a una placa con más o menos componentes electrónicos. Su misión al igual que cualquier ordenador personal es la misma que una calculadora. Frente a datos de entrada, sigue un programa, un algoritmo dado por un programador y cambia su estado interior. Como objetos o dispositivos de entrada  o salida podemos encontrar diversos periféricos, desde simples líneas de entrada digital que pueden estar a cero o a uno, hasta complejos puertos usados en ordenadores que permiten comunicar con otros dispositivos externos como microcontroladores o PC. 

Con esta idea en la cabeza nos encontramos que existen varios fabricantes que ponen a disposición de los desarrolladores miles de modelos distintos en características, tamaños, consumo, periféricos, memoria, etc. La diversidad tiene un objetivo fundamental, reducir costes. No podemos querer un dispositivo totalmente completo y equipado que funcione bien en cualquier diseño y que sea barato. El espacio en un microcontrolador es dinero.  Mientras más características o más memoria, más espacio necesita y por tanto más caro será de fabricar y con ello de adquirir. Por tanto el truco es diseños sencillos y con características limitadas. Con diversos modelos cada diseño tendrá el adecuado, aquel que cumpla con todas las características de las especificaciones del producto a desarrollar y a la vez sea el más económico. 

¿Para que se usan?

La limitación en la aplicación de los microcontroladores a un desarrollo de ingeniería tiene su límite en la imaginación del desarrollador. Con los diversos modelos disponibles podemos afrontar multitud de diseños distintos desde los más simples hasta los más complejos. 

Por nombrar varios ejemplos de aplicaciones, tenemos mandos a distancia, termómetros digitales, controles de acceso por puertas de seguridad, los sistemas ABS o EPS de los coches, control y sensórica de maquinaria, domótica del hogar, microrobótica, monederos electrónicos … De seguir pensando duplicaríamos la lista con poco esfuerzo, pero con esto tenemos una idea del uso actual de los microcontroladores.

Realmente la dificultad no está en usar un microcontrolador para afrontar un proyecto hardware, sino en elegir el fabricante y el modelo adecuado para la aplicación. Con esto lo que tenemos que tener presente es que los microcontroladores nos solucionarán la vida en todos los temas, pero el objetivo es usar el mínimo número de ellos y con el menor coste por unidad. La frase anterior tiene trampa, todo diseño se puede afrontar con microcontroladores, pero según qué especificación o escenario, no siempre será la mejor idea usar uno solo, sino varios distribuidos. Habrá aplicaciones para las que no será posible usar un único microcontrolador, pero si varios de ellos, bien por restricciones de funcionamiento o económicas. Un análisis de costes nos dará la respuesta.

Probando la forja 1 noviembre, 2006

Posted by pjmicrocontroladores in Información general.
2 comments

El domingo pasado autorizaron el proyecto en la forja abriendo con ello la posibilidad de dar a conocer el código fuente del proyecto. Todos los que quieran verlo, ayudar o simplemente dar su opinión pueden hacerlo a partir de ahora en el enlace (1) del post o en el lateral de la página.

 

También comprobarán que ya existe un archivo (al menos) en la sección ficheros que contiene una estructura de directorios con archivos. Para los que vayan a seguir el proyecto de cerca es recomendable que memoricen esta estructura, pues con mínimos cambios será la que seguiremos durante toda la creación del proyecto. Son los ficheros básicos de todo porting de GCC a una nueva arquitectura. Respecto al contenido de los ficheros, simplemente he rellenado algunos campos para conseguir, pero todavía sin éxito, que pueda obtener un primer ejecutable de PIC-GCC que compile algo.

 

Mi apresuración en subir ficheros no debe llevar a engaño, no hay una idea definitiva de atacar el desarrollo, pero como muchos compartirán, la mejor forma de comprobar las ideas superficiales es conseguir un prototipo que compile. Ésta será la base del desarrollo, pensar una idea e implementarla (ligeramente) para afrontar los problemas o valorar las alternativas. Además tenia ganas de probar la forja :).

 

En breve pasaremos a discutir las distintas ideas que tengo en mente y las que espero compartáis. El punto de contacto lo tenemos en el foro de la forja (2), y aquí anunciaré los hilos más interesantes. Además pronto explicaré la estructura de ficheros, la forma de compilar GCC y las herramientas auxiliares necesarias, pero todo esto lo retraso hasta que tenga una versión alpha del ejecutable.

 

También intentaré que, en la medida de lo posible, comience a funcionar la SVN (o control de subversiones).

 

Nos vemos.

 

1) http://forja.rediris.es/projects/cls-pic-16f877/

2) http://forja.rediris.es/forum/?group_id=101

Comenzamos… 27 octubre, 2006

Posted by pjmicrocontroladores in Información general.
1 comment so far

Éste blog surge con la idea de mostrar al gran publico la creación de un nuevo porting de GCC(2). El que escribe, Pedro José Ramírez Gutiérrez, animado por la idea inicial de David Santo Orcero, inicia hoy la creación del porting del backend de GCC a la arquitectura PIC 16F877. La orientación de este proyecto servirá para tres metas, completar el Proyecto Fin de Carrera, lo que me convertiría en Ingeniero en Informática con título acreditativo (pese a que realmente creo que ya nací así), participar en el Concurso Universitario de Software Libre(1), que comienza con su primera edición, y establecer el camino del porting del backend de GCC a toda la arquitectura PIC.

Dando por sentado que muy pocos comprenderán el significado de palabras como porting y backend, pero esperando que la mayoría conozcan al menos la existencia de GCC y que es un microcontrolador, pasaré a comentar las ideas. Antes de nada advierto, para mejorar la explicación usaré continuamente la primera persona del plural de los verbos, sin que ello implique la existencia de una doble personalidad (calla ya, después le pego fuego a eso), sino que hago participe al lector de las explicaciones dadas.

Comencemos, GCC es un conjunto de compiladores.  La arquitectura interna de GCC consiste en tres partes muy diferenciadas. Por cada lenguaje de programación que acepte GCC, nos encontramos con un frontend. El frontend de C, contiene el analizador sintáctico, el semántico, y las instrucciones para que un programa en lenguaje C escrito en un archivo pase a un lenguaje intermedio conocido como RTL. Una vez las instrucciones del programa de entrada estén en el lenguaje intermedio, nos encontramos con la segunda parte de GCC, el middle-end. Aquí es donde ocurren todas las optimizaciones internas que hacen de GCC el compilador más potente actualmente. El lenguaje RTL solo esta en la memoria de GCC, pero por ahora nos basta saber que existe y que GCC sabe optimizarlo. Una vez el código RTL ha sido optimizado, se pasa al último eslabón de la cadena, el backend. Dependiendo de la arquitectura elegida para la salida del programa, se usará el backend necesario para lograr el código deseado.

Aquí es donde entra en juego el objetivo del proyecto. La creación de un backend de GCC para la arquitectura PIC 16F877, nos permite compilar código C, para obtener código ensamblador listo para grabar en el PIC 16F877.  Pero ¿que es el 16F877?. Bueno, un microcontrolador es una cajita negra con patitas metálicas que en su interior contiene un procesador, la memoria RAM y ROM y varios dispositivos. Uno de los fabricantes que crean microcontroladores es MicroChip(3) y uno de los modelos que crea MicroChip es el modelo 16F877. A cambio de conseguir meter un procesador y varios dispositivos en una cajita más pequeña que un euro, tenemos un procesador simple pero eficaz, poca memoria RAM y ROM (comparada con los ordenadores actuales) y dispositivos de Entrada/Salida relativamente simples. Pero la principal ventaja de estos «pequeños» es su precio, los modelos varían según memoria, dispositivos o velocidad pero de media valen unos 6 €. Los que no los conocieran descubrirán en este proyecto una muy agradable posibilidad para el desarrollo hardware.

La idea a largo plazo es completar la familia PIC16 de Microchip, pero como todo tiene un inicio se ha elegido este microcontrolador, potente y completo respecto a periféricos. Las ideas a más largo plazo continúan con el punto de mira en la familia PIC17 y PIC18. Y tres la segunda estrella y a la derecha, me parece ver un 30 y un 24 (los entendidos se sonreirán y espero que no se burlen…mucho). No obstante para comenzar, el modelo PIC 16F877 es un buen inicio.

Dicho esto, comenzamos…

1) http://concurso-softwarelibre.us.es/
2) http://gcc.gnu.org/
3) http://www.microchip.com