Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas
Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas

sábado, 12 de abril de 2014

Creando obxectos parametrizables en Openscad e outras funcións

Openscad permite a posibilidade de crear obxectos de distintas características utilizando unha única definición.
Para poder facer isto precisamos definir módulos (funcións) os cales se lle pasan os parámetros. Estes parámetros diferencian as características dos obxectos.
A definición dun módulo se realiza mediante a palabra clave module. Para exemplarizar isto imos crear unha estrela de oito puntas. En primeiro lugar creamos o módulo marco, que crea un cadrado hueco.
 
//Marco cadrado

module marco( ){

difference (){

cube([40, 40, 10], center= true);

cube([25, 25, 14], center= true);

}

}

A limitación que ten o código anterior é que o marco que crea o módulo sempre ten a mesma dimensión 40 por 40 mm. Podemos definir parámetros para esa función, de maneira que dependendo do valor que lle pasemos na chamada a esa función, podamos variar as características do noso marco. No exemplo imos definir dous parámetros un se vai chamar dimensión é se refire o tamaño externo do cubo e outro altura que define a altura do marco. 

//Marco cadrado con parámetros

module marco(dimension, altura ){

difference (){

cube([dimension, dimension, altura], center= true);

cube([25, 25, 14], center= true);

}

}
Para utilizar este módulo temos que chamalo, como unha función máis do Openscad, especificando entre os parentesis os parámetros.

marco (40, 10); 

Se poden chamar os módulos dende outros módulos permitindo a creación de figuras máis complexas a partir de figuras máis simples.

//Estrela de oito puntas a partir de dous marcos rotados
module estrela (dimension, altura){
              marco (dimension, altura);
  rotate ([0,0,45])
  marco (dimension, altura);

}  

Se isto se garda nun arquivo chamado estrela.scad se pode utilizar en calquera outro deseño importando o arquivo, e chamando o módulo dentro do código.
Utilizando a instrución include se pode facer referencia o arquivo onde se encontra a nosa estrela.

include <estrela.scad>

Para utilizar a función só se ten que facer a chamada, da mesma maneira que si estivera codificado no mesmo ficheiro.


domingo, 28 de abril de 2013

Compilación e instalación de Freertos na Raspberry Pi

Freertos e un sistema operativo en tempo real que pode ser instalado sobre a Raspberry Pi. A diferencia fundamental con respecto a outros sistemas operativos como por exemplo o Raspibian é que nos sistemas operativos de tempo real podes saber que o tempo de proceso do programa vai a ter unha duración dentro dun límite de tempo, o cal permite unha resposta adecuada para unha automatización dun proceso crítico. Nun sistema operativo multitarefa, de propósito xeral, o tempo de proceso non se pode asegurar, depende da prioridade da tarefa, do número tarefas en execución, etc.

Para elo é necesario baixarse unha serie de ferramentas e arquivos que dependen do sistema operativo onde se compilen. Os arquivos necesarios para a compilación se poden encontrar neste repositorio https://github.com/jameswalmsley/RaspberryPi-FreeRTOS. O programa proposto é simplemente un "Ola mundo" pero en harware (un led que parpadea). Hai que baixar os arquivos do repositorio, facendo un git clone.

Como é probable que compilemos os arquivos en un dispositivo distinto da Rasberry pi é necesario utilizar o "toolchain" (non se me ocorre como traducilo) para que a compilación non sexa co xogo de instruccións do procesador do equipo no que imos facer o proceso. O meu procesador, un x86 compila código para outro procesador, un ARM. De non facelo así, o compilar co make nos dará un erro de código 127 por que non encontra o gcc adecuado para compilar o código.

usuario@equipo:/datos/robotica/RaspberryPi-FreeRTOS$ make
 Dark Builder - Unified Build Environment
 Version (1.0.0 - Armstrong)
  [CC]    [RaspberryPi BSP] port.o
make: arm-none-eabi-gcc: Comando non atopado
make: *** [/datos/robotica/RaspberryPi-FreeRTOS/build/FreeRTOS/Source/portable/GCC/RaspberryPi/port.o] Erro 127



A Raspberry utiliza un procesador Broadcom BCM2835 SoC, que a súa vez está formado por varios módulos. O módulos máis importante é o procesador da CPU, un ARM1176JZF 700 MHz. Temos que instalar o compilador adecuado para este procesador que se pode obter do seguinte enlace https://launchpad.net/gcc-arm-embedded/. Ademais temos que especificarlle no makefile o camiño para que encontre os arquivos que precise. A continuación podedes ver como exemplo a ruta que eu tiña no meu equipo.

kernel.elf: LDFLAGS += -L"/datos/robotica/gcc-arm-none-eabi-4_7-2012q4/lib/gcc/arm-none-eabi/4.7.3/" -lgcc
kernel.elf: LDFLAGS += -L"/datos/robotica/gcc-arm-none-eabi-4_7-2012q4/arm-none-eabi/lib/" -lc


Unha vez executado o comando make créase no directorio un arquivo chamado kernel.img. Para poder utilizar ese kernel o máis fácil é nunha instalación de calquera distribución para a Raspberry sustituir o kernel orixinal polo kernel do Freertos. Neste documento podedes consultar como arrinca a Rasberry e o proceso de instalación do Freertos https://abacus.abo.fi/ro.nsf/141b8735bd22ff31c225700600473a01/6bb4b57f4db82685c2257aec0052581e/$FILE/ex5_2013.pdf

Unha vez feito isto, poderedes desfrutar do marabilloso chiscar do led verde  da Raspberry pi.