Upload
others
View
2
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