jump to navigation

Actualización 15 octubre, 2007

Posted by pjmicrocontroladores in Información general, Lanzamiento de versión.
trackback

He subido al control de versiones de la forja una nueva actualización que establece un total de 129 modelos de microcontrolador soportados. Con esto se puede compilar código para la inmensa mayoría de microcontroladores del rango medio de Microchip. Los modelos soportados a nivel de compilación son:

Faltaría por escribir los archivos de cabecera, pero todavía se debe establecer un formato más conveniente que el actual antes de ampliarlo a todos los nuevos microcontroladores.

A partir de ahora el Bloq se convierte en Porting de GCC a PIC16, dado que el 98% de los PIC16 están portados. 

Saludos
Pedro José Ramírez Gutiérrez

Anuncios

Comentarios»

1. Pedro - 29 octubre, 2007

Estoy buscando por la forja la versión que comentas pero no encuentro nada.

Sigue así, esto se necesitaba y mucho!

2. pjmicrocontroladores - 29 octubre, 2007

Hola Pedro

Está en el control de versiones. Tienes más información en:

https://forja.rediris.es/scm/?group_id=101

También te puedes bajar de ahí un snapshot sin tener que manejar subversión. La rama más avanzada es trunk (ignora los directorios .svn).

Cuando tenga un rato lo pondré como una nueva versión. Para la siguiente deseaba subir un tutorial, de ahí el retraso.

Saludos
Pedro José Ramírez Gutiérrez

3. Anyeos - 5 noviembre, 2007

Oye pero no es posible que incluyas el fuente completo? Porque yo bajé con subversion y sólo tengo archivos sueltos que parecen ser para meter en GCC pero qué versión de GCC? Y cómo hacer eso? Además? Hay que bajar todo gcc para solamente tener soporte para PIC? No puedes incluir un gcc ya en el proyecto en el cual funcione bien y así evitamos tener que andar experimentando a ver cuál anda? Porque yo como es la primera vez que lo quiero probar no sé cuál gcc me sirve inclusive todavía no sé cómo hacer eso.

4. Anyeos - 5 noviembre, 2007

Bueno, encontré en el original (no el SVN sino el 1.0) que hay un archivo INSTALL donde están las instrucciones. Ahí dice cómo hacerlo. No me parece buena idea incluir el fuente de gcc en el proyecto, tal vez en las descargas (o el enlace al mismo). Porque ocupa como 31 megas. Pero si gcc completo tiene cosas que no se necesitan se podrían borrar, no? Ahí se incluiría un fuente de gcc mínimo el cual sería totalmente funcional para compilar el soporte -target=pic, aunque no serviría para otras targets, no nos importa. No se puede hacer eso?
Bueno, dejo acá pegadas las instrucciones que hay en el INSTALL para aquellos que se paseen por acá así no tienen que descargar el 1.0 ya que no es necesario (directamente el SVN sirve).
Yo lo descargué con este comando:
svn checkout https://forja.rediris.es/svn/cls-pic-16f877

El INSTALL dice:
——————————————————————————–
Necesitas tener GPutils instalado en tu sistema. Si la ruta de los binarios
de GPutils es diferente a /usr/bin/ debe cambiar las macros DEFAULT_ASSEMBLER
y DEFAULT_LINKER de gcc-4.0.2/gcc/config/pic/pic.h.

Consigue las fuentes de GCC 4.0.2 y el porting para PIC, untar, configura y
compila.

tar xvf gcc-4.0.2.tar.bz2
tar xvf csl-pic-gcc-16f877-0.9.2.tar.gz
mkdir obj-pic
cd obj-pic
../gcc-4.0.2/configure -target=pic -enable-languages=c
make

Puedes instalar el port o usarlo desde gcc-4.0.2/gcc.
Para instalarlo en el directorio por defecto haz:

make install.

Para usar la ultima version del port consija las fuentes con
svn checkout https://forja.rediris.es/svn/cls-pic-16f877

——————————————————————————–
Fin del archivo INSTALL

Voy a probarlo con el PIC16F871 simplemente para sacar código en ensamblador para pegar en mi fuente en ensamblador (por ahora prefiero usar ensamblador).
Quiero implementar algunas funciones complejas que no tengo ganas de idear en ensamblador. Quizá este compilador ya tenga un mejor algoritmo que lo que estuve yo pensando.
Lo que quiero hacer es convertir un valor binario en decimal para mostrarlo en un display de dos dígitos.
Simplemente por curiosidad y si sale algo útil lo voy a utilizar porque realmente una forma que estuve pensando es tediosa. Y otra es más sencilla pero necesito dos lugares de memoria y yo quiero utilizar sólo uno (para comodidad en su manejo en otras funciones). Sino tengo que desplazar la memoria y dividirla en 2 (una para cada dígito) y luego el conteo hacerlo con código (ya que con 4 bits se puede contar de 0 a 15, valores mayores que 9 se combinarían con el siguiente dígito).

Saludos, y nos vemos con los resultados a ver que tal…

5. pjmicrocontroladores - 5 noviembre, 2007

Hola Anyeos

Dos temas:

1º Tu mismo te has respuesto. También podrías haber consultado la entrada siguiente:
https://pjmicrocontroladores.wordpress.com/2006/11/15/documento-compilar-porting-de-16f877-para-gcc/
donde se explica paso a paso.

Se puede quitar todo lo que no sirve de gcc, pero la idea es portar todo gcc a pic. Simplemente es cuestión de tiempo. Por 30 Mg, que normalmente vienen en la mayoría de distribuiciones de linux, no merece darse el trabajo. Yo he probado con éxito 4.0.2 y 4.1.2, pero no hay nada que impida que otras versiones compilen el backend de PIC.

Además el código de gcc sirve para generar los ejecutables de pic-gcc. Una vez generado puedes borrar el código y dejar solo los ejecutables y la libreria libgcc (apenas 10 megas).

2º La idea de programar en código C, es usar todo el sistema en C aunque se pueden incluir rutinas directamente en ensamblador. Por tanto sacar rutinas del código C para su uso en ensamblador es contraproducente. Por un lado las rutinas de C necesitan un sistema de apoyo para funcionar por lo que no se pueden extraer(facilmente). Por otro, si buscas el mejor rendimiento debes usar ensamblador. El código C no es mejor que el (buen) ensamblador para rutinas concretas. Lo és para reusabilidad, facilidad o en sistemas completos donde se aplican optimizaciones que un programador humano no realizaría.

Saludos
Pedro José Ramírez Gutiérrez

6. Anyeos - 7 noviembre, 2007

Sí, es cierto, he comprobado que es mejor usar o bien todo en C o bien todo en ensamblador.
Esta utilidad para compilar de C y obtener el hex y los respectivos archivos de depuración es mejor utilizarla completa para programar todo en C. Ya que el código resultante es un poco complejo como para sacar un fragmento y reutilizarlo. Además el ensamblador de estos PIC es tan sólo de 35 instrucciones. Es tan simple que escribir en ensamblador no te deja muchas salidas por lo tanto hay muchas cosas que hay que hacerlas de un solo modo. Hay pocas opciones en ensamblador así que idear estrategias para escribir código para realizar cierta tarea está limitado a seguir unos pocos caminos que son bastante evidentes. Así que no pude sacarle mucho probecho al código obtenido. En cambio sí le saqué más probecho a código que ha hecho otra gente directamente en ensamblador con estrategias para: Sumar, Dividir, Multiplicar, Restar, Negar y también otras funciones tales como if then, else, etc todas realizadas en ensamblador. De ahí se pueden obtener directamente esos fragmentos para utilizar en nuestros proyectos.
En cambio con esta modificación a gcc se puede programar todo directamente en C y olvidarte por completo del ensamblador. Es otra forma de programar, otro nivel (uno más alto).
Aunque yo todavía no hice nada en C me gustaría probar. Además quisiera saber si sirve para aplicaciones realtime donde se necesita usar los timers o generar retardos exactos. O sea, con este gcc se puede hacer todo lo mismo que lo que normalmente se hace en ensamblador?
Y la otra duda que tengo es: Cómo lo hago?
Aunque no me puse a estudiarlo mucho, tampoco veo que sea tan evidente. No sé cómo se hace un programa en C para el PIC. Sí probé el uso de “main” pero tampoco estoy seguro si eso se hace así. De ahí fue de donde obtuve un código, por eso supuse que al menos había obtenido un programa en blanco para el PIC. Pero si quiero configurarlo? Los parámetros de configuración del PIC, cómo los establezco? (tipo de reloj, WatchDog timer, Code protection, etc).
Cómo accedo a un puerto?
Cómo configuro un puerto?
En fin, ya sabes, todo lo mismo que se hace en ensamblador me gustaría saber cómo se hace en C.

Saludos y disculpa la molestia (por llenarte un poco de comentarios) pero me gusta explicarme bien y dejar algo de contenido para los demás (así aprenden de mi experiencia).
Chaus

7. pjmicrocontroladores - 8 noviembre, 2007

Hola Anyeos

Se puede hacer todo lo que se deseé. Si bien algunas cosas son distintas al ensamblador se pueden hacer de otra forma. Y tienes razón no es nada evidente.

La configuración (por ahora) la establece por defecto. La puedes cambiar desde un programa de grabación tipo ic-prog.

El acceso a los puertos se consigue con punteros. Tienes un archivo de cabecera de ejemplo en los archivos de la forja (p16f877.h). Lo incluyes en el código C y puedes hacer cosas como, por ejemplo, PORTD = 3; o PORTD = (PORTD + 5) – 1;

Para configurar un puerto TRISD=0; PORTD=0xAA; por decir algo. Por ahora es así, cuando se creen bibliotecas de dispositivos será más fácil.

Intento terminar un tutorial, pero necesito tiempo que por ahora desaparece momento a momento 🙂 .

Saludos
Pedro José Ramírez Gutiérrez

8. Ranganok Schahzaman - 19 diciembre, 2007

Hola, hacía tiempo que no me pasaba por aquí y veo que has adelantado mucho.

Como carta a los reyes magos (para la versión 2.0) a ver si pudes implementar la directiva #asm para poder colar código en ensamblador directamente (para rutinas críticas).

S2

Ranganok Schahzaman

9. pjmicrocontroladores - 19 diciembre, 2007

Hola Ranganok Schahzaman

Pues si que hace tiempo. La verdad es que no he hecho ni la decima parte de lo que quería.

Para reyes magos me temo que vas a tener que pedir otra cosa porque la inyección de código ensamblador ya está echa. En GCC tienes la función __asm__ que puedes utilizar sin parámetros para por ejemplo desactivar o activar interrupciones, o con parámetros para cosas más profundas. Dale un vistazo a la página 10 del manual (aunque sea de la versión 0.9 no ha cambiado nada en el funcionamiento). No olvides lo de __volatile__ (casi mejor define una macro tipo #DEFINE ASM __asm__ __volatile__ )

Saludos
Pedro José Ramírez Gutiérrez.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: