38
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL ESCOLA DE ENGENHARIA INSTITUTO DE INFORM ´ ATICA CURSO DE GRADUAC ¸ ˜ AO EM ENGENHARIA DE COMPUTAC ¸ ˜ AO FRANCISCO ROBERTO PEIXOTO SOCAL Ferramenta para Desenvolvimento de Sistemas Embarcados Utilizando Linguagem de Alto N´ ıvel Projeto de Diploma¸ ao Prof. Dr. Altamiro Amadeu Susin Orientador Porto Alegre, dezembro de 2003

Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

Embed Size (px)

Citation preview

Page 1: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SULESCOLA DE ENGENHARIA

INSTITUTO DE INFORMATICACURSO DE GRADUACAO EM ENGENHARIA DE COMPUTACAO

FRANCISCO ROBERTO PEIXOTO SOCAL

Ferramenta para Desenvolvimento deSistemas Embarcados Utilizando

Linguagem de Alto Nıvel

Projeto de Diplomacao

Prof. Dr. Altamiro Amadeu SusinOrientador

Porto Alegre, dezembro de 2003

Page 2: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

SUMARIO

LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

LISTA DE TABELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1 INTRODUCAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1 A ferramenta proposta . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Organizacao deste documento . . . . . . . . . . . . . . . . . . . . . 7

2 DESENVOLVIMENTO DE SISTEMASEMBARCADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1 Possibilidades de implementacao . . . . . . . . . . . . . . . . . . . 92.2 Desenvolvimento de software . . . . . . . . . . . . . . . . . . . . . 92.3 Metodologias alternativas . . . . . . . . . . . . . . . . . . . . . . . . 10

3 A LINGUAGEM LUA . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.1 Aplicacoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Implementacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.1 Conceituacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.2 A Maquina Virtual Lua . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 Utilizacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3.1 Utilizacao em Sistemas Embarcados . . . . . . . . . . . . . . . . . . . 143.4 Exemplos de codigo . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 A FERRAMENTA PICOLUA . . . . . . . . . . . . . . . . . . . . . . . 194.1 O uso da Maquina Virtual Lua . . . . . . . . . . . . . . . . . . . . 194.2 Arquiteturas alvo e a geracao de codigo . . . . . . . . . . . . . . . 194.3 Implementacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.3.1 O modulo nula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3.2 O analisador de codigo . . . . . . . . . . . . . . . . . . . . . . . . . . 224.3.3 O gerador de codigo para PIC . . . . . . . . . . . . . . . . . . . . . . 244.3.4 Extensoes a linguagem Lua . . . . . . . . . . . . . . . . . . . . . . . . 254.4 Metodologia proposta . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5 ESTUDOS DE CASO . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.1 Multiplicacao de inteiros . . . . . . . . . . . . . . . . . . . . . . . . 295.2 Comunicacao serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.3 Sistema de medicao de vibracao . . . . . . . . . . . . . . . . . . . . 315.4 Modelo para aplicacoes distribuıdas . . . . . . . . . . . . . . . . . 32

Page 3: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

5.4.1 Plataformas utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4.2 Conectividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4.3 Benefıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.5 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6 CONCLUSAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

REFERENCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

APENDICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Page 4: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

LISTA DE FIGURAS

Figura 2.1: Fluxo de desenvolvimento de software . . . . . . . . . . . . . . . 10

Figura 3.1: Fluxo de desenvolvimento com a linguagem Lua . . . . . . . . . . 14Figura 3.2: Calculo da sequencia de Fibonacci em Lua . . . . . . . . . . . . . 15Figura 3.3: Utilizacao de tabelas Lua como containers de dados . . . . . . . . 16Figura 3.4: Suporte a orientacao a objetos em Lua . . . . . . . . . . . . . . . 17Figura 3.5: Extensao de semantica na linguagem Lua . . . . . . . . . . . . . . 18

Figura 4.1: Estruturacao da ferramenta picoLua . . . . . . . . . . . . . . . . 20Figura 4.2: Mapa de utilizacao de memoria no PIC . . . . . . . . . . . . . . . 25Figura 4.3: Exemplo de uso da tabela regs . . . . . . . . . . . . . . . . . . 26Figura 4.4: Exemplo de uso de assembly inline . . . . . . . . . . . . . . . . . 26Figura 4.5: Exemplo de definicao do target e da palavra de configuracao . . . 27Figura 4.6: Metodologia proposta com a ferramenta picoLua . . . . . . . . . 28

Figura 5.1: Codificacoes em Lua, bytecodes Lua e assembly do PIC . . . . . . 30Figura 5.2: Sistema tıpico de medicao de vibracao . . . . . . . . . . . . . . . 31Figura 5.3: Arquitetura para aplicacoes distribuıdas . . . . . . . . . . . . . . 33

Page 5: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

LISTA DE TABELAS

Tabela 4.1: Representacao de uma funcao Lua gerada pelo nula . . . . . . . . 21Tabela 4.2: Representacao de uma instrucao gerada pelo nula . . . . . . . . . 22Tabela 4.3: Comparacao entre as metodologias picoLua e SASHIMI . . . . . . 27

Tabela 5.1: Comparacao entre implementacoes em Lua e Assembly . . . . . . 34

Page 6: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

6

1 INTRODUCAO

O avanco constante dos processos de fabricacao de circuitos integrados tem pos-sibilitado o desenvolvimento de sistemas computacionais cada vez mais complexos.Neste cenario, destacam-se os sistemas embarcados que ganham espaco em produtosde eletronica de consumo, mas que em muitas vezes apresentam restricoes de custosou de recursos disponıveis. Como consequencia, o projeto e o teste destes sistemastem se mostrado igualmente difıceis.

Neste sentido, existem diversas metodologias e ferramentas para projeto, des-cricao e sıntese de tais sistemas. Pode-se citar os ambientes de desenvolvimento,com compiladores, simuladores, etc. Embora sejam frequentemente especıficos paradeterminadas tecnologias ou fabricantes (e consequentemente incompatıveis entresi), sao frequentes no cenario atual. Existe tambem a possibilidade de sıntese au-tomatica de hardware e software para integracao em um SOC (System On a Chip),dada uma descricao em uma linguagem de alto nıvel.

Por outro lado, com o crescente aumento da complexidade dos softwares de-senvolvidos, a engenharia de software se faz cada vez mais necessaria. Busca-se odesenvolvimento de software manutenıvel e portavel, mas tambem com rapida proto-tipacao e com a possibilidade de ter seu teste integrado. Linguagens de programacaotradicionais como C++ e Java podem ser utilizadas para atingir tais ideais, mas dei-xam a desejar quando comparadas com as possibilidades oferecidas por linguagensde mais alto nıvel como Scheme, Python ou Lua. Caracterısticas tipicamente encon-tradas em linguagens interpretadas, como flexibilidade, facilidade de integracao comdemais linguagens e programas, tratamento de funcoes como valores de primeiraclasse e migracao de codigo, podem se tornar caracterısticas interessantes no desen-volvimento e principalmente na prototipacao e nos testes de sistemas embarcados.

Neste contexto, a linguagem de programacao Lua destaca-se pela simplicidadeque oferece tais caracterısticas e tambem por ser extremamente portavel e compac-ta (FIG 1996). Adicionalmente, a linguagem mostra-se interessante por ser softwarelivre, o que possibilita sua expansao e o desenvolvimento de trabalhos nela baseados.

Apesar de ser uma linguagem concebida originalmente para extensao de apli-cacoes — onde tradicionalmente interpreta-se diretamente o codigo fonte — a lin-guagem Lua adota um abordagem mais eficiente, similar a de Smalltalk e Java. Foidefinida uma maquina virtual que atende as necessidades da linguagem e para aqual os programas sao compilados, gerando os chamados bytecodes. Os programassao entao executados atraves da simulacao da maquina virtual, interpretando osbytecodes gerados (FIG 1994).

Assim, obtem-se algumas vantagens, tanto sobre linguagens compiladas con-vencionais como sobre linguagens interpretadas. Pode-se citar a portabilidade dos

Page 7: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

7

programas, desde que se tenha implementacoes da maquinas virtuais para as plata-formas desejadas. Ja sobre linguagens interpretadas, tem-se principalmente a maiorvelocidade de execucao, uma vez que a analise lexica e sintatica do codigo fonte soe feita uma vez. Fora isso, de posse da especificacao da maquina virtual, pode-separtir para abordagens alternativas, como a implementacao de maquinas reais oucomo a recompilacao de bytecodes para outras plataformas (STOL 2003).

1.1 A ferramenta proposta

Baseado nestes argumentos, este trabalho apresenta uma ferramenta para o de-senvolvimento e testes de sistemas embarcados baseada na linguagem Lua. Nela saoexploradas as potencialidades da linguagem, sendo esta estendida e portada paraalgumas plataformas computacionais.

Adicionalmente, uma vez que a linguagem Lua ja tem sua maquina virtual imple-mentada e suportada por uma vasta gama de arquiteturas que dispoem de sistemasoperacionais e demais recursos, optou-se pelo aprimoramento da ferramenta, tornan-do possıvel o uso da linguagem em sistemas computacionais com recursos mınimos.Por recursos mınimos entende-se a nao disponibilidade de um sistema operacionalcompleto, com facilidades de gerencia de memoria, manipulacao de arquivos, etc.Assim, teve-se como alvo sistemas profundamente embarcados, sejam eles com mi-crocontroladores, com cores sintetizaveis, ou mesmo em SmartCards e tecnologiassimilares.

Como estudo de caso, optou-se por desenvolver a ferramenta visando a famılia demicrocontroladores PIC, da Microchip. Tal escolha foi motivada tanto pela difusaodestes microcontroladores na industria e por oferecerem uma arquitetura similar aRISC, quanto pelo desafio imposto por sua limitacao de recursos. Sobre sua arqui-tetura, esta facilita a geracao automatica de codigo, o que mostra-se interessante naconcepcao de ferramentas como esta sendo proposta.

Finalmente, dado um programa escrito num subconjunto bem definido da lin-guagem Lua, a ferramenta desenvolvida, batizada como picoLua, e capaz de gerarum programa equivalente na linguagem assembly para estes microcontroladores.

Com isso, e possıvel o desenvolvimento de sistemas embarcados ou mesmo deaplicacoes distribuıdas envolvendo uma variedade de plataformas — desde um sim-ples microcontrolador ate computadores pessoais, handhelds e servidores de grandeporte. Beneficiando-se da uniformidade e portabilidade da linguagem, e possıvel teruma especificacao unica do sistema, independentemente do local onde cada partee efetivamente implementada. E possıvel tambem utilizar as potencialidades ofe-recidas pela linguagem, como a nao diferenciacao entre programas e dados, pararealizar migracao de codigo entre os nos do sistema. Pode-se assim ter estrategiascomo a carga dinamica de codigo, o disparo automatico de testes remotamente etantas outras.

1.2 Organizacao deste documento

Este documento descreve o desenvolvimento da ferramenta, apresentando tantoseus objetivos e o contexto onde e inserida, quanto sua implementacao e algumasaplicacoes praticas.

No capıtulo 2, e abordado de uma maneira geral o desenvolvimento de sistemas

Page 8: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

8

embarcados, dando enfase ao desenvolvimento de software. Nele sao mostradasalgumas metodologias e possibilidades de projeto.

Ja o capıtulo 3 aborda a linguagem Lua, apresentando suas principais carac-terısticas e potencialidades, identificando o que a torna interessante para o uso emsistemas embarcados.

O capıtulo 4 apresenta o desenvolvimento da ferramenta em si, mostrando seusprincıpios de funcionamento e identificando suas funcionalidades. Sao apresentadostambem os recursos da linguagem Lua que podem ser mapeadas para os microcon-troladores escolhidos.

No capıtulo 5 sao apresentados exemplos de utilizacao da linguagem Lua e daferramenta proposta em sistemas embarcados. Sao feitas tambem comparacoes comsolucoes equivalentes, implementadas diretamente em linguagem de montagem.

Finalmente, o capıtulo 6 traz as conclusoes obtidas, fazendo uma analise crıticae apresentando alguns topicos que poderao ser explorados em trabalhos futuros.

Page 9: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

9

2 DESENVOLVIMENTO DE SISTEMASEMBARCADOS

Sistemas embarcados podem ser considerados como exemplos de sistemas dedi-cados ou de aplicacao especıfica. Estao normalmente inseridos em sistemas maiorese sao concebidos para a realizacao de tarefas especıficas, bem conhecidas e deter-minadas em tempo de projeto. De uma maneira geral, apresentam restricoes nosrecursos computacionais disponıveis, nos custos ou mesmo nas condicoes de ope-racao. Como consequencia, diferem-se dos sistemas ditos de proposito geral porestas peculiaridades.

2.1 Possibilidades de implementacao

Do ponto de vista da implementacao, os sistemas embarcados apresentam diver-sas possibilidades, como as listadas a seguir:

• Uso de microprocessadores comerciais, codificando o software em linguagemde montagem (assembly) ou mesmo em linguagens de mais alto nıvel, como alinguagem C e similares;

• Uso de processadores digitais de sinais (DSPs), novamente com software des-crito em linguagem de montagem ou, mais recentemente, em linguagens comoC;

• Desenvolvimento de hardware especıfico, seja atraves de ASICs ou de ASIPs;

• Uso de FPGAs, acomodando hardware especıfico, memorias ou mesmo coresde processadores sintetizaveis;

• Integracao em sistemas em um chip (SOC), acomodando CPU, memorias,conversores, modulos analogicos, etc.

E importante salientar que tais solucoes nao sao necessariamente mutuamenteexclusivas e sao muitas vezes encontradas integradas.

2.2 Desenvolvimento de software

Do ponto de vista do software, o desenvolvimento de sistemas embarcados naodifere significativamente do dos demais, com excecao as metodologias que visam

Page 10: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

10

Figura 2.1: Fluxo de desenvolvimento de software

o desenvolvimento em conjunto de hardware e software (hardware e software co-design).

Em geral, parte-se de uma especificacao geral do sistema e tenta-se delimitaro que sera implementado em software. Busca-se entao a prototipacao do sistema,validando-a atraves de simulacoes ou mesmo utilizando-a em plataformas reais. Umavez validado, o sistema pode ser implementado, desde que neste ponto sejam conside-radas as restricoes impostas pela plataforma alvo. Isto inclui os recursos disponıveis,as restricoes temporais, a potencia a ser consumida e outras.

Durante este ciclo, diversas ferramentas sao utilizadas com fins de simulacao,testes, validacao ou mesmo de traducao entre os diversos nıveis de representacao dosistema. Tradicionalmente, ferramentas como simuladores, compiladores, ligadorese ferramentas de sıntese sao utilizadas, como ilustrado na figura 2.1.

2.3 Metodologias alternativas

No contexto de desenvolvimento exposto, notavelmente diversas linguagens deprogramacao ou de descricao sao utilizadas, o que contribui significativamente parao aumento da complexidade envolvida. Neste sentido, diversas abordagens sao pro-postas visando a simplificacao e unificacao do processo de desenvolvimento. Umaatencao especial deve ser dada as alternativas que buscam a integracao do desenvol-vimento de software e de hardware.

Destaca-se assim a metodologia SASHIMI, que mostra-se interessante por per-mitir a sıntese automatica de um ASIP e seu programa a partir de uma descricaona linguagem Java. Ao utilizar a tecnologia Java, e possıvel a adocao de suas ferra-mentas padrao para o desenvolvimento, compilacao e validacao dos sistemas. Comoconsequencia, tem-se todas vantagens que elas oferecem, como a independencia deplataforma e interoperabilidade. Finalmente, tomam-se os bytecodes gerados pa-ra a Maquina Virtual Java (JVM) como ponto de partida para a geracao de ummicroprocessador dedicado e o respectivo codigo a ser executado (ITO 2000).

Page 11: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

11

Adicionalmente, o processo de codificacao pode ser significativamente melhoradono momento em que sao utilizadas ferramentas e linguagens compatıveis entre si ecom as utilizadas durante a prototipacao do sistema. Similarmente, os testes de taissistemas, embora nao explicitados na figura 2.1, podem ser igualmente beneficiados.Em geral, tal facilidade e oferecida em ambientes de desenvolvimento proprietarios,especıficos para determinadas tecnologias.

Finalmente, sistemas embarcados inseridos em aplicacoes maiores, como apli-cacoes distribuıdas, com diversos nos de processamento, podem ser beneficiadosdiretamente pela migracao de codigo. Por migracao de codigo entende-se a pos-sibilidade de transferir uma determinada tarefa, juntamente com seu contexto deexecucao, para que seja realizada remotamente. Tal caracterıstica pode tambem serutil durante o processo de desenvolvimento e prototipacao, pois acelera o ciclo decodificacao-compilacao-carga-verificacao ao diminuir significativamente o tempo decarga do software no sistema alvo. Por outro lado, para que isto seja possıvel, enecessario existir um nucleo de software no sistema alvo capaz de aceitar conexoesremotas e instanciar as tarefas solicitadas. Varias solucoes existem que oferecem talrecurso, em especial o JavaParty para a linguagem Java (HAU 2003).

Page 12: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

12

3 A LINGUAGEM LUA

Conforme exposto anteriormente, a Linguagem Lua foi especialmente concebidapara extensao e customizacao de aplicacoes. Assim, uma serie de atributos de-sejaveis para esta classe de linguagens foi levada em conta durante sua implemen-tacao (FIG 1994):

• Sintaxe simples, limpa e familiar;

• Implementacao e codigo pequenos, para que o custo de adiciona-la a um sis-tema hospedeiro seja mınimo;

• Expressibilidade e facilidade de descricao de dados, por ser utilizada primari-amente como uma linguagem de configuracao;

• Extensibilidade adequada, permitindo seu uso em diversos domınios e nıveisde abstracao;

Alem disso, a linguagem Lua tem recursos especiais que a tornam poderosa,extensıvel e de alto nıvel, como os listados a seguir. Exemplos de utilizacao destesrecursos sao dados ao final do capıtulo, na secao 3.4.

• Tabelas associativas, o que permite a implementacao de containers de dadosde uma maneira unica e ortogonal;

• Habilidade de definir e manipular funcoes como valores de primeira classe, oque simplifica significativamente a implementacao de facilidades como orien-tacao a objetos;

• Coleta de lixo (garbage collection), eliminando a necessidade de gerencia ex-plıcita de alocacao de memoria;

• Um mecanismo de extensao da semantica da linguagem atraves de meta-tabelas (similar a sobrecarga de operadores em C++).

Por outro lado, como consequencia de nao ter sido planejada para uso em siste-mas maiores, foram abolidos alguns mecanismos, como o encapsulamento de dados(information hiding), a tipagem estatica e a ligacao incremental de codigo. Porem,a ausencia de uma tipagem estatica, aliada a natureza interpretada da linguagem,prove uma flexibilidade extra na descricao de dados e na estruturacao de software,o que e dificilmente atingido em linguagens convencionais.

Page 13: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

13

3.1 Aplicacoes

A linguagem Lua tem se destacado em diversas areas de aplicacao, sendo asprincipais:

• Em jogos, como engines de inteligencia artificial e como “logica de cola” entredemais modulos;

• Como CGI, em aplicacoes Web;

• Como linguagem de configuracao de aplicativos e de equipamentos.

3.2 Implementacao

3.2.1 Conceituacao

Conceitualmente, o suporte a linguagem Lua e disponibilizada como uma peque-na biblioteca de funcoes C que e ligada a uma aplicacao hospedeira. A aplicacaoinstancia entao ambientes de execucao Lua, nos quais sao definidos e manipuladosdados atraves de uma API. E definido tambem um mecanismo para as aplicacoesrealizarem chamadas as funcoes do Lua, seja chamando-as explicitamente atravesda API ou interpretando scripts previamente elaborados.

Finalmente, e possıvel ter funcoes implementadas pelas aplicacoes (codificadasem C, por exemplo) exportadas para o ambiente Lua. Com isto, possibilita-se odesenvolvimento de bibliotecas de funcoes para o Lua, implementando-as em outraslinguagens. Estende-se assim a linguagem, oferecendo novas primitivas, otimizandofuncionalidades com desempenho crıtico ou mesmo provendo acesso a dispositivosespecıficos de uma dada arquitetura.

Como exemplo trivial de aplicacao que utiliza a linguagem Lua, tem-se o inter-pretador de comandos Lua. Codificado em C, o interpretador consiste basicamenteem um laco infinito, que le uma string da entrada padrao e passa-a para a bibliotecaLua para sua execucao. Os resultados da execucao — ou as indicacoes de erro —sao devolvidas para a aplicacao que se encarrega de exibi-los na saıda padrao.

3.2.2 A Maquina Virtual Lua

Do ponto de vista de sua implementacao, a linguagem Lua adota uma estrategiabaseada em uma maquina virtual. Tal estrategia e um meio termo entre as adotadaspor linguagens puramente interpretadas e as adotadas por linguagens compiladas.Por sua vez, a Maquina Virtual Lua (Lua Virtual Machine, ou LVM) utiliza umaarquitetura baseada em um set de registradores, ao inves da abordagem convenci-onal baseada em pilhas, utilizada por muitos interpretadores. Em especial, o usodesta abordagem na especificacao mais recente da LVM (versao 5.0) resultou em umaumento de 30% na velocidade de execucao (IER 2003).

Esta caracterıstica da LVM mostra-se tambem interessante em processos de re-compilacao de codigo Lua, especialmente na ferramenta picoLua. Uma vez queos bytecodes Lua manipulam dados diretamente num conjunto de registradores deproposito geral, o mapeamento para o modelo de memoria dos microcontroladoresescolhidos e imediato.

Page 14: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

14

3.3 Utilizacao

A figura 3.1 mostra um exemplo tıpico de utilizacao da linguagem Lua no con-texto de desenvolvimento de software. Nele, a linguagem e utilizada como stand-alone, diferentemente de seu proposito original de utilizacao embutida em aplicacoes.Percebe-se como a linguagem pode ser aproveitada para especificar, prototipar e im-plementar um sistema a partir de uma descricao unica de software.

Figura 3.1: Fluxo de desenvolvimento com a linguagem Lua

3.3.1 Utilizacao em Sistemas Embarcados

Apesar da linguagem Lua nao ter sido originalmente planejada para uso em sis-temas embarcados, muitas de suas caracterısticas ja apresentadas se destacam etornam esta possibilidade interessante. A seguir sao re-apresentadas algumas carac-terısticas da linguagem, relacionando-as com as vantagens que podem ser atingidasem sistemas embarcados.

Sintaxe simples e familiar Diminui a curva de aprendizado, simplifica o processode codificacao e facilita a manutencao de codigo;

Implementacao compacta e eficiente Permite o uso em sistemas com recursoslimitados, reduzindo custos e energia consumida;

Construcoes de alto nıvel Permite expressar conceitos abstratos de uma manei-ra direta, sem fazer uso de recursos adicionais. Minimiza a possibilidade deerros de codificacao e facilita a manutencao do software;

Facilidade de extensao Permite a utilizacao em diversos domınios: nos sistemasembarcados em si, durante o processo de desenvolvimento e mesmo nos siste-mas maiores que interajam com eles;

Page 15: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

15

Especificacao e implementacao como software livre Oferece uma flexibilida-de adicional para se adequar a caracterısticas especıficas do sistema alvo epermite a facil integracao com outros modulos e sistemas.

3.4 Exemplos de codigo

Nesta secao sao apresentados alguns trechos de codigo como exemplo de codi-ficacao na linguagem Lua. Com eles, busca-se ilustrar a sintaxe e algumas carac-terısticas interessantes da linguagem.

A figura 3.2 apresenta um pequeno programa que calcula os numeros da sequenciade Fibonacci. Nele, a criacao de funcoes dinamicamente e explorada pela funcaocache. Dada uma funcao f , uma nova funcao ff e criada e retornada. A funcaoff e basicamente a funcao f original modificada para manter uma tabela com osresultados de suas execucoes anteriores. No caso da funcao fib, consegue-se reduzir acomplexidade envolvida, de O(cn) para O(n), atraves de um truque de programacaocodificado de uma maneira simples e elegante.

-- Func~ao de Fibonacci convencionalfib = function( n )

if n<2 thenreturn n

elsereturn fib(n-1)+fib(n-2)

endend

-- Criac~ao dinamica de func~oes com memoria das-- ultimas execuc~oescache = function( f )

local c = {}

local ff = function( x )local y = c[x]if not y then

y = f(x)c[x] = y

endreturn y

end

return ffend

-- cria-se uma vers~ao cached para ’fib’, que e-- executada para comparac~ao com a originalcached_fib = cache( fib )print( fib(N), cached_fib(N) )

Figura 3.2: Calculo da sequencia de Fibonacci em Lua

A figura 3.3 mostra a definicao de algumas estruturas de dados basicas, ilustrandoa implementacao de containers dados. Nela, tabelas Lua servem como mecanismode implementacao.

Page 16: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

16

-- tabela como lista: cada entrada-- ganha um ındice numericolist = { "Lua", "C", "C++", "Java" }

-- mapas, dicionario ou tabela associativa:-- para cada chave esta associado um valormap = {}map["Lua"] = "TeCGraf, PUC-Rio"map["C++"] = "Bjarne Stroustrup"map["Java"] = "Sun Microsystems"

-- uso de iteradores para percorrer a tabelafor lang, author in map do

print( lang, "by", author )end

-- estrutura: cada campo e na verdade-- uma chave para uma entrada na tabelapicoLua = {

source = "Lua",implementation = "Lua/LVM",target = "Assembly/PIC"

}

Figura 3.3: Utilizacao de tabelas Lua como containers de dados

A figura 3.4 mostra a construcao de objetos, dentro do conceito de orientacao aobjetos. Gracas a nao diferenciacao entre dados e funcoes, e possıvel utilizar tabelaspara armazenar metodos e variaveis membro.

Finalmente e mostrado o mecanismo de extensao da semantica da linguagematraves de meta-tabelas, na figura 3.5. Nela e definido o comportamento do operadorde adicao para numeros complexos.

Page 17: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

17

-- ’Circle’ e a func~ao construtora, que cria e-- retorna um objeto cırculoCircle = function( r )

-- um objeto e na verdade uma tabela que-- guarda seus membros e metodoslocal c = {}

c.radius = r

-- self e passado como parametro implicito-- ao utilizar a sintaxe obj:method( args )c.area = function( self )

return math.pi * self.radius ^ 2end

return cend

-- instanciac~ao de um objeto e chamada de metodoc = Circle( 10 )a = c:area()

Figura 3.4: Suporte a orientacao a objetos em Lua

Page 18: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

18

-- ’Complex’ e o construtor de objetos que-- represetam numeros complexosComplex = function( r, i )

-- o numero complexo e uma tabela,-- com os componentes real e imaginariolocal c = {}c.real = rc.imag = i

-- ’ops’ e uma tabela com as operac~oes-- sobre numeros complexoslocal ops = {}

-- o nome ’__add’ e predefinido, para-- implementar a semantica do operador ’+’ops.__add = function( a, b )

return Complex( a.re+b.re, a.im+b.im )end

-- finalmente, a tabela ’ops’ e associada a-- meta-tabela de ’c’, que sera consultada-- pela LVMsetmetatable( c, ops )

end

-- criac~ao de complexosi = Complex( 0, 1 )x = Complex( 3, 0 )

-- operac~ao de soma: chamara o meotodo ’__add’-- da meta-tabela de ’x’y = x + i

Figura 3.5: Extensao de semantica na linguagem Lua

Page 19: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

19

4 A FERRAMENTA PICOLUA

Este capıtulo apresenta a ferramenta picoLua, desenvolvida para permitir o usoda linguagem Lua em microcontroladores e microprocessadores embarcados. Talobjetivo e atingido fazendo uma recompilacao dos programas escritos na linguagemLua: a ferramenta e responsavel por analisar os bytecodes gerados e por transforma-los em programas na linguagem de montagem para a arquitetura alvo escolhida.Elimina-se assim a necessidade de se ter a Maquina Virtual Lua implementada paratais plataformas e a consequente utilizacao de um sistema operacional completo.

4.1 O uso da Maquina Virtual Lua

A nao utilizacao da LVM permite o porte da linguagem para sistemas menores.Mas, por outro lado, a linguagem perde algumas das suas caracterısticas marcantes,como a tipagem dinamica e o garbage collection. Assim, optou-se por definir umsubconjunto da linguagem suportado pela ferramenta, que delimita tanto a sintaxereconhecida quanto a semantica passıvel de ser mapeada para a arquitetura alvo.Dentre as caracterısticas da linguagem nao suportadas diretamente pela ferramenta,destaca-se a tipagem dinamica de dados, imprescindıvel para a diferenciacao entredados e programas durante a interpretacao dos programas. Tal diferenciacao erealizada implicitamente pela LVM em tempo de execucao, mas se faz necessariaem tempo de compilacao ao se utilizar a ferramenta para a geracao de codigo emlinguagem de montagem.

4.2 Arquiteturas alvo e a geracao de codigo

Como estudo de caso de arquitetura alvo, escolheu-se a famılia de microcontro-ladores PIC da Microchip. Como consequencia, tem-se a geracao de codigo voltadapara a linguagem de montagem desta arquitetura. Porem, a ferramenta tem suaimplementacao modularizada, separando explicitamente as partes responsaveis porrealizar a descompilacao, a analise dos bytecodes e geracao de codigo em si. Comisto, e perfeitamente possıvel a substituicao do modulo de geracao de codigo poroutro, dedicado a diferentes arquiteturas.

Esta possibilidade pode ainda ser levada ao extremo, gerando codigo em outraslinguagens de alto nıvel, em especial na linguagem C. Apesar de parecer contra-ditoria, a ideia da utilizacao de uma ferramenta para traducao de programas escritosna linguagem Lua para outra linguagem de alto nıvel e valida por diversos motivos:

• Escrito em Lua, o software se beneficia de um serie de as vantagens sobre a

Page 20: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

20

linguagem C, como exposto anteriormente;

• A nao utilizacao da maquina virtual e a consequente tipagem estatica dosdados pode representar um ganho de desempenho sobre sistemas que utilizema linguagem Lua em sua forma interpretada;

• O numero de compiladores C disponıveis para plataformas embarcadas e cres-cente;

• Muitos compiladores C permitem a otimizacao de codigo, explorando possıveisparalelismos e caracterısticas especiais das arquiteturas alvo;

• A implementacao da ferramenta e sensivelmente simplificada pelo fato do com-pilador C ja abstrair detalhes da arquitetura, com destaque para o modelo dememoria a ser seguido;

Adicionalmente, a ferramenta picoLua e implementada quase totalmente napropria linguagem Lua, o que reforca a versatilidade e expressibilidade da lingua-gem. Uma excecao, porem, deve ser feita ao modulo que realiza a descompilacaodos bytecodes e que gera uma representacao interna do programa sendo analisado.Tal modulo e implementado em C, uma vez que e inspirado fortemente no codigo daMaquina Virtual Lua ja existente. Contudo, e perfeitamente viavel sua implemen-tacao em Lua, com o custo da rescrita do codigo.

4.3 Implementacao

A ferramenta picoLua tem sua implementacao dividida em modulos, conformeilustrado pela figura 4.1. Nela e exposto tambem o fluxo de dados sugerido para autilizacao da ferramenta.

Figura 4.1: Estruturacao da ferramenta picoLua

Page 21: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

21

Basicamente, a ferramenta e composta por tres modulos: o nula, que faz adescompilacao dos bytecodes, gerando uma representacao interna passıvel de sertratada na linguagem Lua; o analisador de codigo em si, que identifica as diversasoperacoes realizadas pelo programa fonte e que chama as primitivas para geracao decodigo; o backend, ou gerador de codigo, que e chamado pelo analisador de codigoe que gera o codigo propriamente dito. Finalmente, o codigo fonte completo daferramenta picoLua e apresentado em anexo.

4.3.1 O modulo nula

A traducao de um dado programa com codigo fonte Lua, de sua forma textualpara sua representacao em bytecodes, pode ser realizada pelo compilador Lua, oluac. No caso da ferramenta, tal tarefa e realizada pela funcao loadfile da bibliotecapadrao Lua. O resultado de sua execucao e uma nova funcao que pode ser executadana Maquina Virtual Lua. Tal funcao pode ser entao atribuıda a uma variavel eexecutada posteriormente. No caso da ferramenta picoLua, esta funcao serve comoentrada para o modulo nula.

Codificado em C, o modulo traduz uma determinada funcao representada noformato proprio para execucao na LVM para uma representacao proprietaria, inter-pretavel no ambiente Lua pelos demais modulos da ferramenta. Tal representacao,ilustrada na tabela 4.1, e dada atraves de uma tabela Lua cujos campos descrevemo comportamento e as caracterısticas da funcao original. O codigo executavel dasfuncoes, em instrucoes para a LVM, esta presente no campo code desta tabela etambem e tratado pelo nula: cada instrucao relacionada no codigo executavel erepresentada conforme a estrutura apresentada na tabela 4.2.

Tabela 4.1: Representacao de uma funcao Lua gerada pelo nulaCampo Descricao

is main Flag que indica se a funcao correspondea funcao “main” do programa

source String com o nome do arquivo fonte originalline defined Linha na qual a funcao e definidanum param Numero de parametros recebidos pela funcaois vararg Flag que indica se a funcao recebe um numero

variavel de argumentosstack size Numero maximo de registradores utilizados

pela funcaocode Tabela com o codigo da funcao, em uma

representacao interna para os bytecodesconstants Tabela com as constantes definidas na funcaolocals Tabela com as variaveis locais definidas

na funcaoupvalues Tabela com as upvalues utilizadas pela

funcao (variaveis locais de uma funcao pai,dentro da qual a funcao em questao e definida)

functions Tabela com prototipos de funcoes, definidasdentro da funcao em questao

Page 22: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

22

Tabela 4.2: Representacao de uma instrucao gerada pelo nulaCampo Descricao

opcode Opcode da instrucao utilizado pela LVMa Operando a utilizado pela instrucaob Operando bc Operando cb Operando bsbx Operando sbxline Linha onde a instrucao e definida

4.3.2 O analisador de codigo

Dada a representacao de uma funcao Lua, utilizavel como dado por outra funcaoLua, e possıvel prever estaticamente seu funcionamento e algumas de suas carac-terısticas de execucao. Na ferramenta picoLua, tal tarefa e realizada pelo analisa-dor de codigo, responsavel por identificar operacoes como atribuicao de variaveis,operacoes aritmeticas, testes, manipulacao de tabelas, etc, chamando o gerador decodigo em si. Porem, apenas um subconjunto da linguagem e suportado e consequen-temente algumas construcoes nao sao suportadas pela ferramenta. Novamente, cabeao analisador de codigo identifica-las e reportar ao usuario a impossibilidade deutiliza-las.

De posse da especificacao das instrucoes suportadas pela LVM, e definido preci-samente o escopo de atuacao do analisador de codigo. Em um primeiro momento, atraducao e feita tomando-se instrucao por instrucao, sem que o contexto em que elassao inseridas seja levado em consideracao. Em um segundo momento, sao tratadasas construcoes parcialmente suportadas pela ferramenta e que eventualmente temsuas semanticas alteradas para acomodar as restricoes impostas pela arquiteturaalvo escolhida. Neste grupo estao inseridas a manipulacao de tabelas, a criacao defuncoes e o acesso a variaveis globais.

A seguir e dada uma relacao completa dos opcodes definidos pela LVM e que ca-racterizam as classes de instrucoes gerados pelo Lua. E dada tambem uma pequenadescricao para cada opcode, juntamente com alguns comentarios sobre a abordagemadotada pela ferramenta para trata-lo — ou nao — e traduzi-lo corretamente paraa arquitetura alvo.

MOVE Move dados entre registradores. Sua implementacao pela ferramenta eimediata, pois corresponde ao modelo de memoria adotado pelos microcontro-ladores utilizados.

LOADK Atribui uma constante ao um dado registrador; implementado pela fer-ramenta como carga de um valor literal a um registrador.

LOADBOOL Similar a carga de uma constante, com a diferenca de que um saltocondicional adicional e opcional e especificado. Tal salto e utilizado parapermitir a utilizacao de duas instrucoes consecutivas com LOADBOOL. Eimplementado como um salto convencional ou simplesmente omitido, pois acondicao verificada e conhecida em tempo de compilacao.

Page 23: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

23

LOADNIL Tambem similar a carga de uma constante, mas modificado pois oconceito de valor nulo, utilizado pela LVM, e redefinido para ser representadocomo um valor puramente numerico na arquitetura alvo.

GETUPVAL, SETUPVAL Obtem ou atribui o valor de uma upvalue (variavellocal definida em uma funcao pai da funcao sendo analisada). Nao e suportadopela ferramenta uma vez que o suporte a criacao de funcoes dinamicamentedado pela ferramenta nao abrange a especializacao de funcoes.

GETGLOBAL, SETGLOBAL Obtem ou atribui o valor de uma variavel global,transferindo-a de/para um registrador. Sua implementacao e razoavelmenteimediata, pois deve-se manter uma relacao de variaveis globais a serem aloca-das pela ferramenta. Adicionalmente, um cuidado especial deve ser tomadopois chamadas a funcoes (por instrucoes CALL e TAILCALL) acabam sendocodificadas utilizando estas instrucoes para recuperar uma referencia ao corpoda funcao e armazena-la em um registrador. Tal acao deve ser mapeada parauma chamada de funcao convencional, do ponto de vista da plataforma a terseu codigo gerado pela ferramenta.

GETTABLE, SETTABLE Obtem ou define um campo de uma tabela, dado umındice ou uma chave. Nao e suportada pela ferramenta. Porem, as extensoesdefinidas pela ferramenta para acomodar o acesso direto aos recursos da pla-taforma acabam sendo codificadas com tais opcodes. Assim, uma analise cri-teriosa dos argumentos e feita para identificar tais funcionalidades e trata-lasda maneira correta, como exposto na secao 4.3.4.

NEWTABLE Cria uma nova tabela e armazena-a em um registrador. Nao su-portado pela ferramenta, devido a pequena capacidade de armazenamento daplataforma escolhida;

SELF Similar a GETTABLE, com a diferenca que a referencia a tabela e mantidana pilha para ser passada como parametro a uma funcao, implementandoassim, dentro dos conceitos da orientacao a objetos, uma chamada de metodode um objeto. Nao e suportado pela ferramenta em sua versao atual.

ADD, SUB, UNM, NOT Operacoes aritmeticas, que operam diretamente sobreregistradores ou constantes. O mapeamento para instrucoes da linguagem demontagem alvo e imediato, pelos mesmos motivos apresentados no opcodeMOVE.

MUL, DIV, POW Tambem operacoes aritmeticas, mas nao suportadas direta-mente pela arquitetura. Consequentemente nao sao suportadas pela ferra-menta.

CONCAT Concatenacao de registradores, com uso especıfico para strings. Como osuporte a strings nao esta previsto pela ferramenta, tal opcode nao e suportado.

JMP Salto relativo incondicional. Faz referencia a numeracao interna das ins-trucoes da funcao e assim o deslocamento deve ser recalculado pois nao hauma correspondencia direta entre o numero de instrucoes Lua e da arquitetu-ra alvo.

Page 24: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

24

EQ, LT, LE, TEST Testes e comparacoes entre dois registradores ou constantes,seguido de um salto condicional. Tambem tem um mapeamento imediato,visto que a arquitetura preve comparacoes similares.

CALL, TAILCALL Chamadas de funcoes Lua. Representam o maior desafio im-posto a codificacao da ferramenta, uma vez que as funcoes a serem chamadasnao sao explicitadas nas instrucoes. As funcoes sao referenciadas a partir deregistradores, previamente preenchidos. Assim, para fins de simplificacao, ape-nas funcoes definidas no escopo global podem ser chamadas, fazendo com queas referencias presentes nos registradores sejam obtidas a partir de variaveisglobais. Finalmente um mecanismo especial para tratamento a chamadas defuncoes e realizado em conjunto com o opcode GETGLOBAL.

RETURN Retorno de uma funcao, traduzido para uma instrucao similar na ge-racao de codigo.

FORLOOP Iteracao em um laco for numerico. Tem uma semantica associadasofisticada, uma vez que uma serie de atribuicoes e testes sao definidos paraas instrucoes. Seu tratamento e simples, pois tais operacoes sao diretamentetratadas pela geracao de codigo.

TFORLOOP, TFORPREP Iteracao em um laco for percorrendo elementos deuma tabela. Nao suportados, dado que tabelas nao o sao.

SETLIST, SETLISTO Atribuicao e inicializacao de tabelas, tratando-as comolistas. Novamente, nao suportados.

CLOSE Finaliza o contexto de execucao em questao, especificamente o set de regis-tradores. E simplesmente ignorado pela ferramenta, pois ao contrario da LVM,o set de registradores da arquitetura alvo e fixo e nao pode ser redimensionado.

CLOSURE Instancia (cria) uma nova funcao a partir de um dado prototipo pre-compilado. Tal operacao e utilizada pois funcoes podem ser criadas dinami-camente e eventualmente acessam upvalues que devem ser determinadas emtempo de execucao. Como resultado, tem-se uma referencia a funcao cria-da em um registrador. Assim, geralmente instrucoes desta classe sao segui-das por instrucoes que armazenam a referencia em variaveis ou em tabelas.Na ferramenta, tais instrucoes sao utilizadas internamente para associar osprototipos de funcoes aos nomes de funcoes utilizados no restante do codigo,preenchendo-os na tabela de sımbolos. Tal esquema e processado em conjuntocom o tratamento as instrucoes com o opcode SETGLOBAL.

4.3.3 O gerador de codigo para PIC

Definido o conjunto de instrucoes e funcionalidades da linguagem Lua tratadaspela ferramenta, a geracao de codigo e realizada pelo chamado backend. Mais do quea geracao de codigo, o backend e responsavel pelo suporte a arquitetura alvo comoum todo. Isto envolve a correta utilizacao de seu modelo de memoria, a definicao depolıticas para alocacao de recursos (no caso de registradores e de variaveis globais)e para passagem e retorno de parametros a funcoes.

Quanto ao modelo de memoria, a famılia de microcontroladores PIC ofereceapenas um espaco de enderecamento de dados, visto pelo software como um set

Page 25: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

25

registradores para uso geral. Este acaba por ser utilizado pela ferramenta paraacomodar tanto o set de registradores da LVM, quanto as variaveis globais e aindauma pilha mantida em software para passagem de parametros. Foi entao definida apolıtica para alocacao de registradores:

• As posicoes de memoria iniciais sao utilizadas para acomodar as variaveisglobais. Uma vez que este numero e determinado em tempo de compilacao,tem-se de antemao o tamanho em memoria por elas ocupado.

• As posicoes seguintes sao reservadas para acomodar o set de registradoresutilizado pela Maquina Virtual Lua. Como o tamanho do set de registradorese variavel e dependente da funcao em execucao, seu limite nao e definido e temseu espaco compartilhado com a pilha definida em sequencia.

• As ultimas posicoes de memoria sao utilizadas para acomodar uma pilha man-tida em software para passagem de parametros e salvamento de contexto entrechamadas de funcoes. Sendo uma pilha, tal regiao tem seu tamanho modi-ficado dinamicamente e compartilhado com o espaco reservado para o set decomandos.

A figura 4.2 ilustra esta polıtica de alocacao, mostrando valores reais de posicoesde memoria para o PIC16F876.

Figura 4.2: Mapa de utilizacao de memoria no PIC

Finalmente, e definida a polıtica de passagem de parametros entre funcoes ede salvamento de contexto. Tal esquema segue o modelo classico de passagem deparametros por pilha, o que permite a definicao de funcoes reentrantes e mesmorecursivas. Adicionalmente, o contexto de execucao de uma funcao (do ponto devista do Lua) e seu set de registradores. Assim,prologos e epılogos sao adicionadosaos codigos gerados para as funcoes, tratando o salvamento e a recuperacao dosregistradores utilizados de uma maneira transparente.

4.3.4 Extensoes a linguagem Lua

A linguagem Lua define uma serie de operacoes e funcionalidades para manipu-lacao de dados. Tais dados sao manipulados sobre um set de registradores genericos,que acabam sendo mapeados automaticamente para o set de registradores do micro-controlador. Tal polıtica e limitada, uma vez que impede que dados sejam obtidos

Page 26: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

26

e gerados para o meio externo. Assim, foi definido um mecanismo para acesso di-reto ao hardware do microcontrolador. Pode-se entao manipular diretamente suasportas de entrada e saıda, alem de seus registradores especiais para configuracao emanipulacao de perifericos.

Do ponto de vista dos programas em escritos em Lua, uma tabela global regse disponibilizada, cujos elementos correspondem exatamente aos registradores in-ternos do microcontrolador. Adicionalmente, cada registrador pode ter seus bitsmanipulados individualmente. Tratando-os como tabela, seus bits sao acessıveistanto por mnemonicos como por seus ındices. O trecho de codigo presente na figura4.3 ilustra um pouco das possibilidades de sua utilizacao.

__regs.PORTA = 0xFF -- seta todos os bits da porta A__regs.PORTB[7] = 0 -- limpa o bit 7 da porta B

saved_rcif = __regs.PIR1.RCIF -- guarda a flag de interrupc~ao

Figura 4.3: Exemplo de uso da tabela regs

Alem disso, um mecanismo para codificacao de instrucoes em linguagem de mon-tagem, embutidas em codigo fonte Lua tambem e previsto. A funcao especial asmrecebe como argumento uma string que e copiada literalmente no codigo gerado, parauso exclusivo na ferramenta de montagem. Pode-se assim ter trechos com desempe-nho crıtico codificados diretamente em assembly. Tem-se ainda a possibilidade deutilizacao de instrucoes especiais da arquitetura, nao sintetizaveis pela ferramentapicoLua. Um exemplo de utilizacao desta funcionalidade e mostrada na figura 4.4.

-- Divisao por dois, implementada com um rotate-right.-- O assembly inline e necessario para emitir a instruc~ao-- ’rrf’, n~ao gerada pelo picoLua.-- Os argumentos das func~oes s~ao mapeados automaticamente para-- os registradores R0, R1, R2, ... Sabendo-se isso, pode-se-- manipular seus valores diretamente em assembly!

divide_by_2 = function( x )__asm__( "rrf R0, f" )return x

end

-- Coloca o microcontrolador em modo standby, atraves-- da instruc~ao ’sleep’ gerada por assembler inline

sleep = function()__asm__( "sleep" )

end

Figura 4.4: Exemplo de uso de assembly inline

Tem-se ainda a possibilidade de passar parametros para o montador que proces-sara os dados gerados pela ferramenta picoLua. Tais parametros envolvem o exatomodelo do microprocessador a ser utilizado, bem como sua palavra de configuracao.O modelo e importante tambem para definir a polıtica de alocacao de memoria. Ja a

Page 27: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

27

palavra de configuracao traz informacoes utilizadas pelo montador ao gerar imagenspara programacao dos microcontroladores.

Para acomodar tais informacoes, foram definidas as funcoes reservadas targete config , que recebem como parametro, respectivamente, uma string que defineo modelo do microcontrolador e a palavra de configuracao a ser embutida na imagempara programacao. A figura 4.5 traz exemplos de utilizacao de tais funcionalidadesna ferramenta picoLua.

__target__( "p16f876" )__config__( "_HS_OSC & _WDT_OFF & _PWRTE_ON &"

"_BODEN_ON & _LVP_OFF & _CPD_OFF &""_WRT_ENABLE_OFF & _DEBUG_OFF & _CP_OFF " )

Figura 4.5: Exemplo de definicao do target e da palavra de configuracao

Por fim, permite-se a associacao de uma funcao ao tratamento de interrupcoes.Tal facilidade e novamente oferecida atraves de uma funcao especial, no caso afuncao interrupt . Tal funcao recebe como parametro o nome da funcao queefetivamente tratara as interrupcoes e se encarrega de gerar o codigo de entradae saıda de interrupcao. O salvamento de contexto nao e implementado, ficando acargo da aplicacao lidar com tais detalhes. Exemplos de utilizacao deste recurso saoas aplicacoes que utilizam o modulo de comunicacao serial, apresentadas no capıtulo5.

4.4 Metodologia proposta

A ferramenta proposta tem uso ilustrado pela figura 4.6. Percebe-se a possibilida-de de utilizacao da linguagem Lua durante a fase de desenvolvimento e prototipacaodo software, atraves de um ambiente de simulacao em um computador pessoal, porexemplo. A mesma descricao pode entao, uma vez simulada e validada, ser utilizadacomo entrada da ferramenta picoLua, gerando assim o codigo final a ser programadono sistema alvo. E ilustrado tambem a possibilidade de se ter o alvo da ferramentaredefinido, gerando codigo em linguagem C, por exemplo.

Finalmente, e apresentada uma comparacao entre a metodologia proposta atravesda ferramenta picoLua e a metodologia SASHIMI. A tabela 4.3 mostra algumas desuas caracterısticas, principalmente no que diz respeitos as arquiteturas, linguagense ambientes envolvidos.

Tabela 4.3: Comparacao entre as metodologias picoLua e SASHIMICaracterıstica picoLua SASHIMI

Linguagem Lua JavaAmbiente de execucao LVM JVMAplicacao SW embarcado HW/SW embarcadosAmbiente de desenvolvimento JDK —Entrada bytecodes Lua bytecodes JavaSaıda assembly PIC ASIP femtoJava (VHDL)

+ programa

Page 28: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

28

Figura 4.6: Metodologia proposta com a ferramenta picoLua

Page 29: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

29

5 ESTUDOS DE CASO

Este capıtulo apresenta algumas aplicacoes que ilustram o uso da ferramentapicoLua e da linguagem Lua em sistemas embarcados. Em um primeiro momento,a ferramenta picoLua e utilizada para a codificacao isolada de funcoes basicas parao microcontrolador PIC na linguagem Lua. Tais funcoes permitem comparacoes di-retas com implementacoes equivalentes em linguagem assembly, o que e interessantepara avaliar a eficiencia da geracao de codigo pela ferramenta.

Em um segundo momento, a ferramenta e utilizada para codificar o software deum sistema de aquisicao de dados, com comunicacao em tempo real com um com-putador pessoal. Sao explorados entao alguns conceitos da engenharia de software,como a modularizacao e a reutilizacao de codigo.

Finalmente, e apresentado um modelo para desenvolvimento de aplicacoes distri-buıdas, onde a linguagem Lua e utilizada para descrever o software de seus diversoscomponentes. Nele podem ser exploradas algumas das caracterısticas interessantesda linguagem, como a migracao de codigo e a utilizacao da mesma em multiplasplataformas.

5.1 Multiplicacao de inteiros

Neste exemplo e realizada a multiplicacao de dois numeros inteiros. Tais numerossao representados por variaveis sob o ponto de vista da linguagem Lua, mas que saomapeados automaticamente para registradores de 8 bits do microprocessador. Oresultado obtido e armazenado em outra variavel, cuja representacao tambem edada em 8 bits. Neste sentido, nenhum controle de overflow e realizado. O exemploe util por explorar a codificacao de operacoes aritmeticas e de lacos em Lua. Afigura 5.1 apresenta o programa elaborado em suas tres representacoes tratadas pelaferramenta: a primeira coluna contem o programa original, codificado na linguagemLua; a segunda coluna, os bytecodes gerados pelo compilador Lua, identificando oopcode e seus operandos; finalmente, a terceira coluna mostra o codigo assemblygerado, resultado da recompilacao dos bytecodes pela ferramenta picloLua.

Com este exemplo, percebe-se nitidamente o efeito do tratamento individuali-zado de instrucoes por parte da ferramenta. Uma vez que o contexto em que umainstrucao esta inserida nao e levado em consideracao, e definida uma correspondenciaum-para-um entre uma dada instrucao da LVM e o codigo gerado pela ferramen-ta. O que por um lado simplifica a implementacao da ferramenta, por outro levaa geracao de codigo ineficiente, passıvel de ser otimizado. Isto pode ser percebidonos casos onde valores sao movidos do registrador de trabalho do microprocessador(registrador w) para registradores de uso geral (R0, R1, ...) e na instrucao seguinte

Page 30: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

30

Codigo Lua original Bytecodes Lua (LVM) Assembly PIC---------------------------------------------------------------------------------local a, b LOADNIL 0, 1, 0 clrf R0

clrf R1local res = 0 LOADK 2, 2, 0 movlw 0x00

movwf R2for bit = 0,7 do LOADK 3, 2, 0 movlw 0x00

movwf R3LOADK 4, 3, 7 movlw 0x07

movwf R4LOADK 5, 4, 1 movlw 0x01

movwf R5SUB 3, 3, 5 movf R3, w

subwf R5, wmovwf R3

JMP 0, 12 goto L0P22__asm__( "rrf R0, f" ) GETGLOBAL 6, 5 L0P10:

LOADK 7, 6CALL 6, 2, 1 rrf R0, f

if __regs.STATUS.C then GETGLOBAL 6, 7 movf STATUS, wGETTABLE 6, 6, 258 movwf R6GETTABLE 6, 6, 259 clrf R6

btfsc STATUS, Ccomf R6, f

TEST 6, 6 0 movf R6, wbtfsc STATUS, Z

JMP 0, 1 goto L0P19res = res + b ADD 2, 2, 1 movf R2, w

addwf R1, wmovwf R2

end__asm__( "rlf R1, f" ) GETGLOBAL 6, 5

LOADK 7, 10CALL 6, 2, 1 rlf R1, fFORLOOP 3,-13 L0P22: movf R5, w

addwf R3, fmovf R3, wsubwf R4, wbtfsc STATUS, Cgoto L0P10

end RETURN 0, 1, 0 return

Figura 5.1: Codificacoes em Lua, bytecodes Lua e assembly do PIC

Page 31: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

31

sao trazidos novamente para o registrador de trabalho. Obviamente, tal overheadnao e gerado codificando-se diretamente na linguagem de montagem, mas, por ou-tro lado, pode ser reduzido drasticamente atraves de ferramentas de otimizacao decodigo automatizadas ou pela analise semantica durante o processo de geracao decodigo.

Por fim, o mesmo programa foi codificado diretamente em assembly e teve seutamanho avaliado para fins de comparacao com o codigo gerado pela ferramenta. Oresultado desta comparacao e apresentado na secao 5.5, juntamente com as compa-racoes dos demais programas de teste.

5.2 Comunicacao serial

Este exemplo configura e utiliza o modulo de comunicacao serial (USART) pre-sente no microcontrolador, para realizar um loop local em uma comunicacao com ummicrocomputador pessoal. Sao utilizadas as funcionalidades da ferramenta picoLuapara acesso direto ao hardware e aos registradores do PIC. Novamente, e feita umacomparacao com o mesmo sendo descrito diretamente em assembly. Os resultadossao tambem apresentados na secao 5.5.

5.3 Sistema de medicao de vibracao

O Sistema de Medicao de Vibracao com Acelerometros de Estado Solido, de-senvolvido no Laboratorio de Processamento de Sinais e Imagens, LaPSI, da Uni-versidade Federal do Rio Grande do Sul, e um sistema de aquisicao de dados deaceleracao obtidos atraves de acelerometros de estado solido. O sistema e capaz detransmiti-los em tempo real para um computador PC, onde a comunicacao podeser feita via interface serial ou paralela. O sistema, batizado de AXPC, tem seuuso ilustrado na figura 5.2, onde e inserido em um sistema tıpico de medicao devibracao (SOC 2002).

Figura 5.2: Sistema tıpico de medicao de vibracao

O AXPC faz uso de um microntrolador PIC e tem seu firmware originalmente co-dificado na linguagem assembly. Seu firmware foi entao reescrito na linguagem Luacom a ferramenta picoLua. Assim, foi explorada a modularizacao de codigo atravesda criacao de modulos independentes para configuracao e inicializacao de disposi-tivos, para atendimento a interrupcoes e para recebimento e transmissao de dados.

Page 32: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

32

A possibilidade de reuso de codigo foi validada utilizando as funcoes previamentecriadas para o programa de exemplo exposto na secao 5.2.

O codigo fonte para o firmware do AXPC escrito em Lua e apresentado em anexoe serve como exemplo completo da utilizacao da ferramenta. Sao explorados prati-camente todo os recursos suportados da linguagem, alem das construcoes especıficasda ferramenta picoLua para utilizacao nos microcontroladores PIC.

5.4 Modelo para aplicacoes distribuıdas

Finalmente, e apresentado um modelo para desenvolvido de aplicacoes distri-buıdas que envolvam diferentes arquiteturas computacionais e que facam uso dalinguagem Lua. Apesar de extremamente simples, o modelo torna-se interessan-te por ser baseado em uma rede heterogenea e por demonstrar a versatilidade dalinguagem.

5.4.1 Plataformas utilizadas

As plataformas utilizadas sao normalmente associadas a domınios de aplicacoesdiferentes, o que permite a construcao de um sistema significativo do ponto de vistada utilizacao da linguagem. Sao elas:

• Computador pessoal (PC) com o sistema operacional Linux. A linguagemLua e utilizada em sua implementacao tradicional, baseado na sua maquinavirtual. Sao utilizadas suas bibliotecas padrao, com algumas modificacoes paraacomodar o suporte a sockets TCP/IP (NEH 2003) e a comunicacao serial.Tais facilidades sao utilizadas para comunicacao com os demais dispositivosenvolvidos na aplicacao.

• Handheld iPAQ, com o sistema operacional PocketPC (originalmente conhe-cido como Microsoft WindowsCE). O suporte a linguagem Lua e dado atravesdo porte da linguagem e da maquina virtual (BLA 2003), especialmente mo-dificadas para utilizarem a API deste sistema operacional (Win32 API). Eacrescentado o suporte a sockets TCP/IP e a interface grafica com o usuario(GUI). E conectado ao PC via interface USB, sobre a qual e definida umainterface PPP para transporte de TCP/IP;

• Kit microcontrolado (PIC16F876), onde a ferramenta picoLua e utilizada comosuporte a linguagem Lua. A interface serial e utilizada para comunicacao como PC e, indiretamente, com o iPAQ.

5.4.2 Conectividade

A comunicacao entre os elementos do sistema e dada quase integralmente atravesde sockets. A excecao e dada ao PIC, que nao possui uma implementacao da pilhaTCP/IP. Assim, para tornar a comunicacao entre os nos perfeitamente simetrica,foi criado um pequeno daemon que, executado no PC, faz o intermedio entre ainterface serial para comunicacao com o PIC e um socket para comunicacao comos demais elementos. Por fim, tem-se uma rede que, embora heterogenea, tem seuselementos acessıveis por uma maneira unica. A figura figura 5.3 apresenta tal modelode comunicacao.

Page 33: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

33

Figura 5.3: Arquitetura para aplicacoes distribuıdas

5.4.3 Benefıcios

Ao se utilizar um modelo como o proposto para aplicacoes distribuıdas, umaserie de benefıcios sao atingidos, alem das vantagens ja mostradas na secao 3.3.1.Pode-se citar:

Metodologia de projeto unica Por se tratar de uma linguagem com implemen-tacoes para diversas plataformas, tem-se possibilidade de seguir uma metodo-logia de projeto unica, compartilhando ferramentas de projeto, descricoes desistemas e mesmo bibliotecas e codigo-fonte;

Descricao unica do sistema No momento em que todos os nos sao codificados namesma linguagem e seguem a mesma metodologia de projeto, pode-se utilizaruma descricao unica do sistema. Pode-se decidir, em tempo de projeto oumesmo de execucao, o que sera executado em cada no, sem a necessidade dese ter implementacoes diferentes para as diferentes arquiteturas envolvidas;

Migracao de codigo/carga dinamica de aplicacoes Pode-se utilizar a migracaode codigo para implementar abordagens como a carga dinamica de programas.Como consequencia, tem-se a possibilidade de se implementar arquiteturas re-configuraveis ou mesmo de reduzir o as necessidades de memoria dos elementosdo sistema, tornando-os simples agentes que recebam e executem programasremotamente.

5.5 Resultados

Com o proposito de avaliar o codigo gerado pela ferramenta e comparar seu de-sempenho com solucoes equivalentes, descritas diretamente em assembly, alguns pro-gramas de exemplo foram escolhidos. O tamanho, medido em palavras da memoriade programa, foi escolhido como criterio para a avaliacao de tais programas. Estametrica, alem de avaliar a eficiencia na geracao de codigo por parte da ferramenta,e valida tambem para avaliar o tempo de execucao dos programas. Isto porque aespecificacao do microcontrolador define o tempo de execucao por instrucao comosendo unico e conhecido em tempo de desenvolvimento.

Page 34: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

34

Por outro lado, foi avaliado tambem o numero de linhas dos programas fonteoriginais. Isto e util para quantificar e ilustrar as vantagens da utilizacao de umalinguagem como Lua em sistemas embarcados. Percebe-se nitidamente uma reducaono numero de linhas de codigo escritas, o tem que como consequencia a simplificacaodo processo de desenvolvimento.

Os resultados obtidos sao mostrados na tabela 5.1, juntamente com estimativaspara as possıveis otimizacoes sobre os programas gerados pela ferramenta picoLua.Esta estimativa e baseada em otimizacoes manuais, realizadas sobre o codigo assem-bly gerado pela ferramenta.

Tabela 5.1: Comparacao entre implementacoes em Lua e AssemblyLinhas de codigo Codigo gerado (palavras de memoria)

Programa Assembly Lua Assembly Lua Lua otimizadoMultiplicacao inteiros 17 11 17 34 29Comunicacao serial 102 55 80 179 133Firmware AXPC 283 157 174 482 251

Page 35: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

35

6 CONCLUSAO

Este trabalho propoe o uso da linguagem Lua em sistemas embarcados. Para istofoi desenvolvida a ferramenta picoLua, que possibilita o uso da linguagem Lua emmicrocontroladores atraves da recompilacao de bytecodes. A ferramenta mostrou-se interessante por fazer a ligacao entre dois domınios distintos: o dos sistemasembarcados, utilizando processadores simples, com restricoes de recursos e de projetobem definidas, com o das linguagens de scripting de alto nıvel, tradicionalmenteinterpretadas e utilizadas em aplicacoes maiores. Adicionalmente, a linguagem Luafoi explorada em outros sistemas, ja com recursos adicionais que permitam o uso deum sistema operacional.

A prototipacao de sistemas com a linguagem Lua tambem foi visada com estetrabalho. Ao tratar o desenvolvimento dos programas de exemplo, foram postasem pratica algumas ideias como a modularizacao e o reuso de codigo, importantespara acelerar o processo de desenvolvimento de software. Alem disso, a utilizacaode um codigo fonte unico, com partes sendo implementadas na plataforma de de-senvolvimento e aos poucos sendo migradas para a plataforma alvo mostrou-se umapossibilidade interessante oferecida pela linguagem Lua.

Embora pouco explorado neste trabalho, o teste de sistemas embarcados podeser diretamente beneficiado pelo uso da linguagem Lua. Com a flexibilidade dedescricao de dados e de integracao de modulos, a linguagem Lua mostra-se umaalternativa para a elaboracao de estrategias de teste. Parte-se de uma descricao unicae centralizada dos testes a serem realizados no sistema como um todo, para entaodispara-los remotamente, possivelmente em plataformas variadas. O modelo paradesenvolvimento de aplicacoes distribuıdas, apresentado como exemplo de utilizacaoda linguagem e da ferramenta, apresenta esta ideia ao permitir a migracao de codigoentre os nos, eliminando a necessidade de se ter os testes previamente codificados earmazenados em todos os dispositivos envolvidos.

Do ponto de vista de sua implementacao, a ferramenta picoLua e igualmenteinteressante por ser codificada na propria linguagem Lua. Utiliza os programas emLua ja compilados em bytecodes, o que dispensa a implementacao de analisadoreslexico e sintatico, ja tratados pela linguagem em sua forma tradicional. Com isto,simplificou-se o desenvolvimento da ferramenta, pois os analisadores representamgrande parte da complexidade de um compilador convencional. Permitiu-se aindafocar os esforcos na geracao de codigo e nas extensoes a linguagem para sua utilizacaoem sistemas embarcados.

Por outro lado, a ferramenta ainda e um trabalho em andamento. Ha muito aser feito para torna-la uma alternativa concreta para o desenvolvimento de sistemasreais perfeitamente utilizavel. O tratamento e a verificacao de erros sao deficitarios,

Page 36: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

36

embora ja seja dada uma atencao especial aos erros de sintaxe por parte das fer-ramentas padrao da linguagem Lua. Alem disso, o codigo gerado e ineficiente emuitas das construcoes significativas da linguagem Lua nao sao suportadas, como ouso de meta-tabelas para extensoes de semantica, o proprio uso de tabelas e o tra-tamento de funcoes como dados. Ha tambem a possibilidade de geracao de codigopara outras plataformas que nao a famılia de microcontroladores PIC atualmentesuportada. Deixa-se entao tais melhorias como sugestoes para trabalhos futuros,juntamente com a ideia da utilizacao da linguagem e da ferramenta em cores comoo RISCO ou os da famılia ARM.

Page 37: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

37

REFERENCIAS

[FIG 1996] FIGUEIREDO, L; IERUSALIMSCHY, R; CELES, W. Lua: an ex-tensible embedded language. In: Dr. Dobb’s Journal 21 #12 (Dec1996). p.26-33.

[FIG 1994] FIGUEIREDO, L; IERUSALIMSCHY, R; CELES, W. The designand implementation of a language for extending applications.In: Proceedings of XXI Brazilian Seminar on Software and Hardware(1994) 273-283.

[STOL 2003] STOL, K. Pirate: A Compiler for Lua targeting the ParrotVirtual Machine. Hamburg, 2003. 96p.

[ITO 2000] ITO, Sergio. Projeto de Aplicacoes Especıficas com Microcon-troladores Java Dedicados. Porto Alegre: PPGC da UFRGS, 2000.84p.

[HAU 2003] HAUMACHER, B. et al. Transparent Distributed Threads forJava. In: Proceedings of the 5th International Workshop on Java forParallel and Distributed Computing (IPDPS 2003). Nice: France, IEEEComputer Society, 2003.

[IER 2003] IERUSALIMSCHY, R. The Virtual Machine of Lua In: LightweightLanguages 2003 (LL3). Cambridge: MIT, 2003.

[SOC 2002] SOCAL, F. Sistema de Medicao de Vibracao com Acelerometrosde Estado Solido. Porto Alegre: LaPSI-DELET-UFRGS, 2002. 14p.

[NEH 2003] NEHAB, D. LuaSocket: IPv4 Sockets support for theLua language. Disponıvel em http://www.tecgraf.puc-rio.br/ die-go/luasocket/new/. Acesso em: dez. 2003.

[BLA 2003] BLANDING, S. Lua on the PocketPC. Disponıvel emhttp://www.uoam.net/lua.html. Acesso em: dez. 2003.

Page 38: Ferramenta para Desenvolvimento de Sistemas Embarcados …socal/projects/picoLua/doc/FranciscoSo... · ca˘c~oes | onde tradicionalmente interpreta-se diretamente o c odigo fonte

38

APENDICES

Codigo fonte da ferramenta picoLua

Codigo fonte do firmware do AXPC