Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 17 de septiembre de 2012 a las 09:11 UTC
Todos los usuarios de Pinguino conocemos el gran potencial que esta tarjeta tiene y todo lo que podemos hacer con ella, bueno, es hora de ver que podemos hacer por ella, una manera de colaborar con su desarrollo es escribiendo bibliotecas.

Archivos necesarios
archivo.c: en donde se escribirán todas las funciones propias de la biblioteca.
archivo.pdl: en donde se definirán los nombres de las funciones del archivo.c para darles un toque mas al estilo de C++
archivo.pdl32: igual que el archivo anterior pero para 32-bit


Ficheros de instalación
En los directorio p8 y p32 existe en su interior las rutas hacia /include/pinguino/core y /include/pinguino/libraries, éstos dos ficheros (core y libraries) son para almacenar archivos que gestionan los recursos internos del procesador (SPI, UART, USB, PWM, etc ...) y para todos los demás recursos externos (SD, bluetooth, servo, etc ...) respectivamente.
Los archivos .pdl y .pdl32 van en p8/pdl y p8/pdl32 según correspondan.

ArchivoDescripciónArquitecturaFichero
biblioteca_core.c
archivo que gestiona recursos
internos
8bit
p8/include/pinguino/core
biblioteca_lib.c
gestiona recursos externos, como sensores, protocolos etc.
8bit
p8/include/pinguino/libraries
keyWords.pdl
define los nombres de las funciones
para su uso dentro del IDE
8bit
p8/pdl
biblioteca32_core.c
archivo que gestiona recursos
internos
32bit
p32/include/pinguino/core
biblioteca32_lib.c
gestiona recursos externos, como sensores, protocolos etc.
32bit
p32/include/pinguino/libraries
keyWords32.pdl
define los nombres de las funciones
para su uso dentro del IDE
32bit
p32/pdl32
*También se puede hacer uso de las archivos de cabecera (.h)


¡Importante!
Las bibliotecas para Pinguino NO se escriben en «lenguaje Pinguino», no sirve que se ejecuten en el IDE como funciones normales, el motivo es que sobre estas bibliotecas no se realizan tareas de pre-procesamiento como sí se hace con los archivos .pde del IDE, esto significa que se deben de hacer algunas cosas que se acercan mas a la programación de microcontroladores comunes.

Esto sucede por los mismos archivos .pdl y .pdl32 que es en donde se «renombran» las funciones, en tal caso de necesitar funciones como pinMode, digitalWrite, millis, delay o definiciones como u8, u16 se deberá hacer uso de los archivos originales en donde éstos están definidos y usar su nombre correspondiente, por ejemplo la función pinMode pertenece a la biblioteca digitalw.c y se llama allí pinmode.


Ejemplo:
Hagamos una plantilla para una biblioteca, una sencilla, con una única función: hacer «parpadear» un LED, queremos que reciba como parámetro el pin del LED, la veces a parpadear, y las pausas entre parpadeo.
/**
p8/include/pinguino/libraries/
**/

#include  //para usar pinmode
#include  // para usar Delayms
#include  //para usar u8, u16...

u8 i;

void blinkLed(u8 led, u8 times, int pausa){
    pinmode(led, OUTPUT);
    digitalwrite(led, HIGH);
    for (i=0 ;i<=times*2 ;i++){
        toggle(led);
        Delayms(pausa);
        }
    }
El anterior archivo va en el directorio p8/include/pinguino/libraries/ Lo siguiente que debemos hacer es el fichero .pdl, que para este caso sólo será una línea (una por cada función accesible para el usuario), se debe de respetar la siguiente estructura, es muy importante ya que con éste fichero se realizan las tareas de pre-procesamiento. [nombre de la función en el IDE][ESPACIO][nombre original en la biblioteca]#include[ESPACIO]<[nombre de la biblioteca]>
exampleLbr.blinkLed blinkLed#include 
y guardarlo en el fichero p8/pdl

Ahora ¿qué se ha hecho en el archivo user_ibrary.pdl?, bueno, se le ha dicho al pre-procesador que cada que encuentre la función example_lbr.blinkLed en el IDE la reemplace por la función blinkLed que se encuentra en user_ibrary.c y que para eso incluya ésta biblioteca si no lo estaba. Así que para hacer uso de nuestra biblioteca, el usuario solo deberá preocuparse por por llamar exampleLbr.blinkLed (o como lo hallamos definido en el archivo .pdl)


NOTA
El proyecto Pinguino necesita mucho apoyo por parte de la comunidad, se necesitan personas que colaboren en la documentación de funciones, que desarrollen librerías y nos compartan sus opiniones.

P.D.
Estaría bien contar con una funcionalidad dentro del IDE para instalar librerías de terceros ;)

También podría interesarte:

Comentarios:
Pablo dijo:
mayo 13, 2013, 9:04 p.m.
Quisiera saber si puede crear un fichero.h y un fichero.c con las funciones que quiero reutilizar. ¿Es posible? Fichero.h void Parpadea(int pin, int retraso); Fichero.c void Parpadea(int pin, int retraso){ digitalWrite(pin,HIGH); delay(retraso); digitalWrite(pin,LOW); delay(retraso); }
Responder a Pablo
Respuesta de Ricardo Lara:
ago. 3, 2013, 11:19 p.m.
Hola pablo, quisiera saber si has podido crear alguna biblioteca para pinuino gracias, ademas si sabes como cambiar la interfaz :)
Responder a Ricardo Lara
Añadir un nuevo comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.