73
PUC-Rio eLua Desenvolvimento Embedded no Mundo da Lua Dado Sutter (Luiz Eduardo de Miranda Correa Sutter)

PUC-Rio eLua...PUC-Rio eLua - Propostas O projeto eLua, tecnicamente falando, busca: • Trazer Lua para o mundo embedded • Absorver a complexidade para oferecer simplicidade •

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • PUC-Rio

    eLuaDesenvolvimento Embedded no Mundo da Lua

    Dado Sutter(Luiz Eduardo de Miranda Correa Sutter)

  • PUC-RioEstrutura da Apresentação

    Introdução• O GIGA e o Led na PUC-Rio• Histórico dos projetos que resultaram em eLua

    Um pouco de Lua• A revolução Lua • Aspectos básicos da linguagem• C API • Exemplos de código 

    eLua• Objetivos• Desafios• Arquitetura, Requisitos, Plataformas, Módulos • Programando em C e em Lua com eLua 

    eLua Hands-on• Demonstração de algumas plataformas rodando eLua   

        

  • PUC-Rio

    GIGAGrupo de Inovação e Gerenciamento Ambiental

      

    Sob a Coordenaçao do Prof. Raul Nunes Coordenador Central de Projetos e Desenvolvimento PUC-Rio

    Atividades• Instrumentação para Monitoramento Ambiental Remoto • Projetos para outros departamentos e pesquisadores da PUC-Rio• Projetos para clientes e parceiros externos• Formação de alunos na graduação 

    Parcerias • Cisco Systems Framework para desenvolvimento de aplicações para Telefonia IP

    • TecgrafSIGMA – Gestão do Processo de Licenciamento Ambiental de Projetos da PB

  • PUC-Rio

    GIGA

  • PUC-Rio Pequeno histórico

    ● Projeto ReVaLuaTe Bogdan Marinescu, Bucarest, Romênia – 2005

    ● Projeto Volta   Dado Sutter PUC-Rio - 2005 a 2007

     

    ● Projeto eLua - Julho 2008 http://www.eluaproject.net

  • PUC-RioeLua - Desafios

    • Reusabilidade de código embedded• Redução de custo de desenvolvimento• Redução da complexidade da programação• Refinamento de testes e depuração• Ampliação do universo de recursos humanos para embedded• Portabilidade dos algoritmos e de bibliotecas• Processamento distribuído• Evitar a invasão de burocracia no mundo embedded

  • PUC-Rio eLua - Propostas

    O projeto eLua, tecnicamente falando, busca:

    • Trazer Lua para o mundo embedded

    • Absorver a complexidade para oferecer simplicidade

    • Oferecer soluções para portabilidade e reusabilidade de código embedded

    • Oferecer bibliotecas (portáteis) em Lua 

    • Oferecer um File System, sem depender de um OS

    • Oferecer um Shell básico num console via usart (serial, usb, ...) ou Ethernet

    • Integrar um stack TCP/IP e um servidor web (http)

    • Edição de programas, via Terminal, diretamente nas MCUs

    • Trazer a diversão de volta para o mundo embedded :) 

       

     

  • PUC-Rio

     eLua

    Mas por que Lua?

    • Trazer Lua para o mundo embedded...

  • PUC-Rio

     Lua - O que é Lua?“Lua é uma linguagem de programação poderosa, rápida e leve, projetada para estender aplicações” (www.lua.org)

    Criada na PUC-Rio em 1993 (15 anos!) pelos pesquisadores:•   Roberto Ierusalimschy - PUC-Rio•   Luiz Henrique Fiqueiredo - IMPA•   Waldemar Celles - PUC-Rio

      

    Lua é Software Livre e de Código aberto  Lua é Distribuída sob a licença MIT 

  • PUC-Rio

     Lua – Alguns Jogos

  • PUC-Rio

     Lua – Alguns Jogos

  • PUC-Rio

     Lua – Alguns Jogos

  • PUC-Rio

     Lua – Alguns Jogos

  • PUC-Rio

     Lua – Alguns Jogos

  • PUC-Rio

     Lua – Alguns Produtos

  • PUC-Rio

     Lua - TIOBE Index

  • PUC-Rio

    Lua - TIOBE Index

    • http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

  • PUC-Rio

    Lua – Eventos Internacionais

    History of Programming Languages HOPL 2008 

    Lua Workshops • 2005, 2006, 2008• USA e Holanda• Patrocínios: Adobe, VeriSign Inc, CS@GW, MCCI, Flying Meat,

    EarthLCD, Cengage, Learning, Wiley

    Participação em vários eventos de outras linguagens e tecnologias    

  • PUC-Rio

     Lua - Princípios

    • Pequena• Portátil • Eficiente• Fácil integração com C e C++• Sintaxe simples e reduzida• Facilidades para descrição de dados• Robusta• Reflexiva • Mecanismos de extensão• Poderosa, muito poderosa :)    

    “Simple things simple, complex things possible”(Roberto Ierusalimschy)                      

  • PUC-Rio

     Lua - Embedded Language

    Lua é uma Extension Language• Estende a funcionalidade do programa host• Programa host em qualquer linguagem• Programa host tem sua funcionalidade estendida por funções e

    código Lua

     

    Lua é uma Extensible Language• Uso de funções externas estende a funcionalidade de Lua• Rotinas em qualquer linguagem podem ser chamadas• Lua tem sua funcionalidade estendida por funções na linguagem

    host 

     

  • PUC-Rio

    Lua - Aspectos    

    Outras construções da linguagem:

    • Arrays Associativos (Tables)• Funções são First Class values (!!!!!) • Lexical Scope e Lambda Calculus• Iterators• Coroutines (sem depender de um OS !!!)• Incremental Garbage Collection• Reflexividade• Carga dinâmica de módulos Lua e C• Reentrante

  • PUC-Rio

    Lua - Paradigma

    Lua é Multi-Paradigma

    • Procedural• Declarativo• Object Oriented• Functional• Aspect• ...... 

    "Meta-mecanismos trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais"

    (lua.org)

  • PUC-Rio

    Lua - C API   A API C de Lua:– Uma só abstração para o host e para Lua– Baseada em uma estrutura simples, um Stack Virtual– Vista por C para enviar e receber valores para Lua

    Usando Lua em C:

    #include “lua.h”#include “lualib.h”#include “lauxlib.h”void main (void) { lua_State *L = luaL_newstate(); luaL_openlibs(L); . . . lua_close(L);}

  • PUC-Rio

    Lua – C executando Lua

    Um host mínimo para execução de um programa externo em Lua:

    #include “lua.h”#include “lualib.h”void main (void) { lua_State *L = luaL_newstate(); luaL_openlibs(L); lua_dofile(L, "programa.lua"); lua_close(L);}

  • PUC-Rio

    Lua – Documentação

  • PUC-Rio

    Lua – Documentação

  • PUC-Rio

    Lua – Documentação

    Programando em Lua para World of Warcraft

  • PUC-Rio

    Lua – Documentação

    Homepage em:• http://www.lua.org

    GDoc em Português “Descobrindo Lua”:• http://docs.google.com/Doc?id=ajhs6smwb6t4_271dk4kwqfh

    • http://tinyurl.com/5l6z89

    http://www.lua.org/http://docs.google.com/Doc?id=ajhs6smwb6t4_271dk4kwqfhhttp://tinyurl.com/5l6z89

  • PUC-Rio

    eLua

    Lua Embedded, pra quem?

  • PUC-Rio

    DesenvolvedoreLua

    ProgramadorLua Programador

    eLua

    MCU

    CPUCPU

    eLua - Programadores

  • PUC-RioeLua - Pra quem?

    Há basicamente três tipos de usuários eLua:

    Programador de aplicações Lua• Conhece Lua• Não precisa conhecer nada sobre eLua, plataformas, MCUs• Conhece os módulos Lua para periféricos de eLua 

    Programador eLua• Conhece C e o básico de Lua• Conhece o básico de eLua• Conhece os módulos C para periféricos de eLua• Conhece a arquitetura de sua plataforma-alvo

    Desenvolvedor eLua• Nos ajuda com a programação do core eLua• Conhece profundamente eLua, Lua e C• Domina o build do toolchain GCC + libs para eLua• Conhece diferentes arquiteturas de MCUs

  • PUC-RioeLua 

    Requisitos de Memória

    Típico Hoje• 256 KB ROM (Flash, E2PROM, ...)• 64 KB RAM

    Tiny model• 128 KB ROM• 32 KB RAM 

    Ideal • 256KB+ ROM• 512KB+ RAM   

  • PUC-RioeLua – CPUs e Plataformas

    CPU Suportadas: (out 2008)• ARM7 – STR7, AT91SAM7X, LPC288x• ARM9 – STR9 • Cortex M3 – LM3S• x86 – i386, ... , AMD

    Plataformas Suportadas: (nov 2008)• ScTec MOD711 (ARM7)• Luminary EK-LM3S8962 (Cortex M3)• Luminary EK-LM3S6965 (Cortex M3)• Hitex STR9-comStick (ARM9)• Olimex LPC-H2888 (ARM7)• Olimex SAM7-EX256 (ARM7) • PC (x86) 

    Em breve: AVR32,  AT91RM9200, AT91SAM9261, M16C/62P, M32Rxx,                  AVR (X)Mega, PIC32, STM32 (Cortex), ... , eZ80 (8 bits !!! :-o :)

  • PUC-Rio

    eLua  Requisitos de Software

    Para desenvolvimento em Lua:• Todos os ambientes conhecidos• Diretamente na MCU (!!!) 

    Para desenvolvimento de eLua: • Qualquer ambiente com um Toolchain GCC para sua MCU-alvo• Até agora só testamos em GNU Linux (Ubuntu)  

    eLua é ANSI C (!!!)

  • PUC-Rio

     elua – Usando as MCUs em Lua

    Terminal XModem Bit Math

    TimerUSARTSPINET DACPWM CPU

    HTTP SRV PID

    ADC

  • PUC-Rio

     eLua - Módulos

    Módulos Genéricos (comuns a todas as plataformas)• TERM (Terminal)• PACK• BIT (operações e manipulação de bits)• MATH (funções matemáticas)• NET (network operations) • em breve: LCD, PID, RTC ....    

    Módulos Periféricos (específicos para cada plataforma)• SPI • UART• TMR• PWM• PD (platform data)• CPU• em breve: A/D, D/A, WDT, INT, ....

  • PUC-Rio

    eLuaAlguns Módulos e suas funções:

    ● SPI     (setup, select, unselect, send, send_recv)● PWM  (setup, start, stop, setclock, getclock)● TERM (clrscr, clreol, gotoxy, up, down, left, right, lines, cols, put,

    putstr, putstrxy, cursorx, cursory, getch)● PIO    (set, setpin, get, clear, input, output, setport, getport,

    port_input, port_output, pullup, pulldown, nopull, port, pin)● TMR   (delay, read, start, diff, mindelay, maxdelay, setclock, getclock)● UART (setup, send, recv, sendstr)● PD     (platform, cpu, board, clock)● NET   (accept, packip, unpackip, connect, socket, close, send, recv,

    lookup)● CPU   (w32, r32, w16, w8, cli, sei, clock)● BIT    (bnot, band, bor, bxor, lshift, rshift, arshift, bit, set, clear, isset,

    isclear)● PACK (pack, unpack)

  • PUC-Rio

    eLua - Hello World

    O Hello World do mundo embedded, em eLua 

    ledpin = pio.PA_0timerID = 0ns = 500000 pio.output( ledpin )while true do pio.set( ledpin ) tmr.delay( timerID, ns ) pio.clear( ledpin ) tmr.delay( timerID, ns )end

  • PUC-Rio

    eLua - pwm

    Configurando e controlando PWM em eLua:

    pwm.setup( 1, 250000, 50 )

    pwm.start( 1 )

    .........

    pwm.stop( 1 ) 

  • PUC-Rio

    eLua - pwmpwmid, tmrid = 0, 1pwm.setclock( pwmid, 25000000 )print "Control LED with PWM (fade up/down)"print "Press any key to exit"crtduty, incr = 10, 5pwm.setup( pwmid, 50000, crtduty )pwm.start( pwmid )while uart.recv( 0, 0, 0 ) < 0 do if crtduty == 100-incr or crtduty == incr then incr = -incr end crtduty = crtduty + incr pwm.setup( pwmid, 50000, crtduty ) tmr.delay( tmrid, 50000 ) endpwm.stop( pwmid )

  • PUC-RioeLua - Como obter

    Build eLua: The Linux way ! :) 

    Download eLua: http://www.eluaproject.net Repositório Subversion

    Atualmente temos binários para as seguintes MCUs: ● ARM7 - STR711● ARM9● ARM Cortex M3● Intel x86 e AMD - só como prova de conceito (and because it's FUN! :)

    http://www.eluaproject.net/

  • PUC-Rio

     elua – Binários Executáveis

    1 - Baixar imagem eLua para sua plataforma● http://www.eluaproject.net

    2 - Gravar imagem na Flash da sua MCU● Programas proprietários e SDKs● OpenOCD

    3 - Conecte-se localmente à sua plataforma● Conectar um Emulador de Terminal via serial ou USB

    ... ou, se sua plataforma oferecer conectividade Ethernet,

    3 - Conecte-se remotamente● Abrir um Terminal em qualquer máquina e se conectar à MCU● Telnet para o IP da placa

  • PUC-Rio

    eLua - Documentação

    Homepage: www.eluaproject.net

    Extras:● Tutoriais para build do Toolchain para várias plataformas:– ARM7– ARM9– ARM Cortex M3– X86

    ● Tutorial OpenOCD

    Na distro de eLua:● diretório /doc

    Lista de Discussão: https://lists.berlios.de/mailman/listinfo/elua-dev

    http://www.eluaproject.net/https://lists.berlios.de/mailman/listinfo/elua-dev

  • PUC-Rio

        eLua - Licenças

    eLua é Software Livre e de Código Aberto   

    eLua é distribuída sob a licença GPL•Deve migrar para BSD

      

    A marca eLua e o logotipo estão registrados e pertencem à PUC-Rio 

  • PUC-Rio

    Agradecimentos

    Raul Almeida NunesBogdan Marinescu Led Lab Team

    Roberto IerusalimschyAndré Carregal Fabio Pereira e Giovani BalduinoDiego SueiroCícero Pompeu e André BrazEverson Denis

    - PUC-Rio- Bucarest, Romênia- PUC-Rio

    - PUC-Rio- Fabrica Digital - ScTec Automação, Joinville, SC - Portal Embarcados- ST Brasil- tradução do site para português

  • PUC-Rio

            Contatos

    Bogdan [email protected]

    Dado [email protected]

    mailto:[email protected]

  • PUC-Rio

           

     Have Fun!!!

    http://www.eluaproject.net/

     

    http://www.eluaproject.net/

  • PUC-Rio

    Apêndices

  • PUC-Rio

    Lua - Noções Básicas • Lua é uma linguagem Dinamicamente Tipada

    (é diferente de uma linguagem não-tipada)

    • Variáveis não são tipadas e recebem qualquer valor    Number, String, Boolean, Function, Thread, Nil, Userdata, Table  

    • Valores é que são tipados            

    • Atribuições Múltiplas:   a, j = 6, "Portal Embarcados"   a, b, c = 1, 2   a, b = 1, 2, 3, 4, 5   x, y = y, x  

    • Variáveis:     Não precisam ser declaradas    São gerenciadas automaticamente (Garbage Collection)  

  • PUC-Rio

     Lua - Estruturas de ControlePoucas, Simples e Poderosas

    Controles:• if .. then .. else .. elseif .. end• while .. do .. end• repeat .. until

    Duas formas de for• Numérico: for v1=exp1, exp2, exp3 do .. end  (tradicional)• Genérico: for v1, v2,... in iterator() do ..... end (sensacional :)

     Break

    • interrompe a execução de um bloco for, while ou repeat Return  

    • Interrompe a execução de um bloco e retorna valores• Pode retornar mais de um valor (!!!!)

  • PUC-Rio

     Lua - Functions    

    Funções são "first-class values"  (!!!!)• podem ser passadas como argumentos• podem ser atribuidas à variáveis comuns e tables• podem ser retornadas por outras funções• todas são anônimas (!) seus nomes são das variáveis que as contém

    Podem retornar múltiplos valores:• v,  err =  f(x)

    Suportam e podem retornar número variável de argumentos• function f(...) 

    Suportam argumentos nominais (não posicionais)• window(title="PUC-Rio", width=80, height=25)

    Suportam Lexical ScopeContém Lambda CalculusSuportam Proper Tail CallsNotação para OO

    • tbl.fun(tbl, x)   =  tbl:fun(x)

  • PUC-Rio

        Lua - Tables Arrays Associativos key,value

    • Alocação e gerenciamento dinâmicos de espaço.

    • Sem declarações ou dimensionamentos. Totalmente dinâmica.  

    • Uma só estrutura dinâmica implementa inúmeras construções. Simplicidade. –Arrays, Listas, Filas, Tabelas, Estruturas, Sets, Matrizes Esparsas,–Namespaces, OO Objects & Methods, Packages, ....... 

    • Qualquer valor pode ser usado como índice, mesmo funções 

    • Lua usa tables internamente para representar seus módulos e entidades 

    • Funções internas Lua são table entries e podem ser editadas (!!!!) 

    • Com chaves numéricas se tornam matrizes comuns e esparsas

  • PUC-Rio

      Lua - Strings e I/O Libs   

    Rico suporte à manipulação de strings• Sort• Patern Matching find and substitutions• Podem conter quaisquer valores, inclusive \00• Tratamento unificado para strings longas (~GBs)

      Rico e nativo suporte à I/O

    • Conceito de file independente do OS, ótimo para embedded !• Binary files

       

  • PUC-Rio

    Lua – Falando com C   

    Enviando valores de C para Lua:

    void lua_pushnil (lua_State *L);void lua_pushboolean (lua_State *L, int bool);void lua_pushnumber (lua_State *L, lua_Number n);void lua_pushinteger (lua_State *L, lua_Integer n);void lua_pushlstring (lua_State *L, const char *s, size_t, len);void lua_pushstring (lua_State *L, const char *s);

    Recebendo valores de Lua em C:

    int lua_toboolean (lua_State *L, int index);lua_Number lua_tonumber (lua_State *L, int index);lua_Integer lua_tointeger (lua_State *L, int index);const char *lua_tolstring (lua_State *L, int index);size_t lua_objlen (lua_State *L, int index);

  • PUC-Rio

    Lua - Modules   // Extendendo Lua com uma função em Clua_pushcfunction(L, fname);lua_setglobal(L, “lua_fname”);// Extendendo Lua com um módulo de funçõesstatic const luaL_reg robot_map[] ={ { "init", disp_init }, { "enable", disp_enable }, { "disable", disp_disable }, { "on", disp_on }, { "off", disp_off }, { "clear", disp_clear }, { "strDraw", disp_stringDraw }, { "imgDraw", disp_imageDraw }, { NULL, NULL }};LUALIB_API int luaopen_disp( lua_State *L ){ luaL_register( L, “disp”, disp_map ); return 1;}

  • PUC-RioGCC pra ARM - Linux Build

    Requisitos Uma máquina Linux

    • Ubuntu 8.04 Desktop• Shell bash

    Dependências  $ sudo apt-get install build-essential $ sudo apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo

    GNU binutils:• Homepage: http://www.gnu.org/software/binutils/ • v2.17 (a última não funciona e não sabemos porque)•  

    GCC:• Homepage: http://gcc.gnu.org/ • v4.3.0 (a que testamos) ou superior

     Newlib: 

    • 1.16.0 + CVS

    Dir  $ cd  /home $ mkdir eLua $ cd eLua   $ export TOOLPATH=/usr/local/cross-arm

  • PUC-RioBuilding GCC ARM Step 1 - Gnu Binutils

    • Download Gnu Binutils$ cd ~/eLua$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2 

    • O básicão: Extract, Config, Build $ tar xvfj binutils-2.17.tar.bz2$ cd binutils-2.17$ mkdir build$ cd build$ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork  --enable-multilib    --with-gnu-as --with-gnu-ld --disable-nls$ make all$ sudo make install$ export PATH=${TOOLPATH}/bin:$PATH  

    • Agora as binutils para ARM estão no seu PATH     

  • PUC-RioBuilding GCC ARMStep 2 - Gnu GCC

    Downloading GNU GCC• mirrors em: http://gcc.gnu.org/mirrors.html 

      $ cd ~/eLua    $ wget ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.3.1/gcc-4.3.1.tar.bz2   Conf make sem algumas libs   $ tar xvfj gcc-4.3.1.tar.bz2 $ cd gcc-4.3.1/libstdc++-v3 $ joe configure.ac                                                            (ou qq outro editor....)     Localizar a linha com: AC_LIBTOOL_DLOPEN     Comentar com um # na primeira coluna:  #AC_LIBTOOL_DLOPEN $ autoconf $ cd ..  Build   $ mkdir build $ cd build $ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib     --enable-languages="c,c++" --with-newlib --without-headers --disable-shared --with-gnu-as --with-gnu-ld $ make all-gcc $ sudo make install-gcc Agora o GCC para ARM (arm-elf-gcc) está instalado e no seu PATH   

  • PUC-Rio

    Building GCC ARM Step 3 - Newlib

    Extract$ cd ~/eLua$ tar xvfz newlib-1.16.0.tar.gz Configure $ cd newlib-1.16.0$ mkdir build$ cd build$ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork  --disable-newlib-supplied-syscalls --with-gnu-ld --with-gnu-as  -disable-shared Make$ make CFLAGS_FOR_TARGET="-ffunction-sections-fdata-sections  -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer  -D__BUFSIZ__=256" Install$ sudo make install  ... ou contornando o problema$ sudo -s -H$ export PATH=/usr/local/cross-arm/bin:$PATH$ make install

  • PUC-RioBuilding GCC ARM Step 4 - Full GCC

    $ cd ~/eLua/gcc-4.3.1/build$ make all   

  • PUC-RioGCC pra Cortex - Requisitos

    Uma máquina Linux    Ubuntu 8.04 Desktop   shell bash  GNU binutils:  Homepage: http://www.gnu.org/software/binutils/     v2.17            (a última não funciona e não sabemos porque)  GCC:  Homepage: http://gcc.gnu.org/    4.3.0 + Newlib:   1.16.0 + CVS

    Outras Dependências  $ sudo apt-get install build-essential $ sudo apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo Dir  $ cd  /home $ mkdir eLua $ cd eLua    $ export TOOLPATH=/usr/local/cross-cortex

      

     

  • PUC-RioBuilding GCC CortexStep 1 - Gnu Binutils

    Download Gnu Binutils$ cd ~/eLua$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2 

    O básicão: Extract, Config, Build $ tar xvfj binutils-2.17.tar.bz2$ cd binutils-2.17$ mkdir build$ cd build$ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork  --enable-multilib    --with-gnu-as --with-gnu-ld --disable-nls$ make all$ sudo make install$ export PATH=${TOOLPATH}/bin:$PATH  Agora as binutils para Cortex estão no seu PATH 

  • PUC-RioBuilding GCC Cortex

    Step 2 - Gnu GCCDownloading GNU GCC  mirrors em: http://gcc.gnu.org/mirrors.html   $ cd ~/eLua    $ wget ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.3.1/gcc-4.3.1.tar.bz2    Conf make sem algumas libs  $ tar xvfj gcc-4.3.1.tar.bz2 $ cd gcc-4.3.1/libstdc++-v3 $ joe configure.ac                                                                    (ou qq outro editor....)     Localizar a linha com: AC_LIBTOOL_DLOPEN     Comentar com um # na primeira coluna:  #AC_LIBTOOL_DLOPEN $ autoconf $ cd ..  Build   $ mkdir build $ cd build $ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib     --enable-languages="c,c++" --with-newlib --without-headers --disable-shared --with-gnu-as --with-gnu-ld $ make all-gcc $ sudo make install-gcc 

      

  • PUC-RioBuilding GCC CortexStep 3 - Newlib 1/2

    $ cd [directory where the newlib CVS is located$ joe configure.acLocalizaar: arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )noconfigdirs="$noconfigdirs target-libffi target-qthreads"libgloss_dir=arm;;

    Adicionar "target-libgloss" à variável "noconfigdirs" :arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )noconfigdirs="$noconfigdirs target-libffi target-qthreads target-libgloss"libgloss_dir=arm;;

    $ autoconf

  • PUC-RioBuilding GCC CortexStep 3 - Newlib 2/2

    Extract$ cd ~/eLua$ tar xvfz newlib-1.16.0.tar.gz Configure $ cd newlib-1.16.0$ mkdir build$ cd build$ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork  --disable-newlib-supplied-syscalls --with-gnu-ld --with-gnu-as  -disable-shared Make$ make CFLAGS_FOR_TARGET="-ffunction-sections-fdata-sections  -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer  -mcpu=cortex-m3 -mthumb -D__thumb2__  -D__BUFSIZ__=256" CCASFLAGS="-mcpu=cortex-m3 -mthumb -D__thumb2__" Install$ sudo make install  (... ou contornando o problema)

    )

    $ sudo -s -H$ export PATH=/usr/local/cross-arm/bin:$PATH$ make install

  • PUC-RioBuilding GCC Cortex

    Step 4 - Full GCC$ cd gcc-4.3.1/build$ make CFLAGS="-mcpu=cortex-m3 -mthumb" CXXFLAGS="-mcpu=cortex-m3 -mthumb"   LIBCXXFLAGS="-mcpu=cortex-m3 -mthumb" all$ sudo make install

  • PUC-RioeLua - Building Requirements

    Máquina Linux    Ubuntu 8.04    GCC + Newlib Toolchain   Build próprio   Use um binário nosso Seu Toolchain "bin" directory /usr/local/cross-arm/bin/usr/local/cross-cortex/bin/usr/local/cross-...../bin Python$ sudo apt-get install python Scons $ sudo apt-get install scons  Nasm (apenas para target i386)$ sudo apt-get install nasm

  • PUC-Rio

      eLua - Build

    Explicações na distro eLua, em docs/building.txt

    $ cd ~/eLua/trunk

    $ scons [target=lua | lualong] [cpu=at91sam7x256 | at91sam7x512 | i386 | str912fw44 | lm3s8962 | lm3s6965 | lpc2888 ] [board=ek-lm3s8962 | ek-lm3s6965 | str9-comstick | sam7-ex256 | lpc-h2888 pc] [cpumode=arm | thumb] [allocator = newlib | multiple] [prog]

  • PUC-RioFramework

     de desenvolvimentoToolset / Framework

    • Toolchain GCC, configurado para seu OS de desenvolvimento, para sua plataforma-alvo e preparado para eLua.

    eLua• Lua para sua plataforma • Extensões para periféricos (módulos)• Utilities

    Código Lua para rodar embedded• Exemplos de programas eLua

  • PUC-RioLua - Building Lua

    Building Lua in Ubuntu Desktop GNU Linux:

    1) Get Build Essentials ( GNU Compiler Tools )  sudo apt-get -y install build-essential libreadline5-dev3) Get Lua Source Code    mkdir lua  cd lua  wget http://www.lua.org/ftp/lua-5.1.4.tar.gz    (Obs: verifique sempre o nome da última versão disponível em http://www.lua.org/ftp )4) Extract    tar -xvvzf lua-5.1.2.tar.gz  cd lua-5.1.2

    Obs: a partir deste ponto pode-se consultar o arquivo INSTALL, que veio com o pacote Lua, com instruções simples sobre a instalação.

    5) Make  (ver instru''cões no arquivo INSTALL)   make linux6) Install (cópia simples para o diretório adequado)   cp /usr/local/bin/lua  /usr/bin

       Pra instalar geral: sudo make install      Pra instalar localmente: make local    

        PUC-Rio

  • PUC-Rio

  • PUC-Rio

  • PUC-Rio

    Lua - Versões  Versão Atual, Fev 2008:: Lua 5.1      Release Atual, Agosto 2008: Lua 5.1.4

      Possíveis novas features em Lua 5.2:• emergency garbage collector (core forces a GC when allocation fails)• ephemeron tables (tables with weak keys only visit value when key is accessible)• handling of non-string error messages• new function package.searchpath• "metamethods" __pairs & __ipairs• tables and strings respect __len metamethod• User data with finalizers are kept in a separated list for the GC• arguments for function called through xpcall

      Outras possíveis alterações:• string.pack/string.unpack (along the lines of struct/lpack)• Implementation for yield using longjmp, allowing yields inside pcall, metamethods etc.• some form of bit operations• luaL_tolstring behavior change with maybe a lua_rawtostring (no coercions from numbers)

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73