Java em sistemas embarcados. Por que não?

java em sistemas embarcados

Neste artigo pretendo discutir o emprego da linguagem Java em projetos de sistemas embarcados.

 

Até recentemente, um software construído em Java era tido como lento dentro das conversas de bar entre engenheiros de software de sistemas. Naturalmente a batalha se dava entre os que advogavam a favor das ferramentas da Microsoft e os desenvolvedores Java (que, até à época, eram os anti-Microsoft). Tive a oportunidade de testemunhar várias discussões calorosas.

 

O bem da verdade é que a linguagem Java se consagrou. Conseguiu emplacar seu uso nos mais diversos cenários de equipamentos computacionais. Sua utilização em sistemas de informação é consolidado. Diversos bancos têm seus softwares escritos em Java. O Java Micro Edition (J2ME) teve seu momento de glória na época pré-iPhone, nos novos smartphones que estavam surgindo. E também houve espaço para Java também em smartcards (Javacard), no software que é executado dentro do processador que se encontra dentro do chip do cartão, para comunicação com o host (computador, terminal de pagamento, sistema de controle de acesso, ...).

 

Atualmente, seu uso para desenvolvimento de aplicativos em sistemas embarcados ainda é restrito. Eu, pessoalmente, conheço somente o Ginga, o middleware da TV digital brasileira. Acredito que existam outros casos, porém eu ainda infelizmente não os conheço.

 

O que acontece hoje em dia é que os processadores embarcados estão com capacidade de processamento similar ao de computadores pessoais não tão antigos assim. Somado isso à iniciativas como a Raspberry Pi e a BeagleBone Black, nas quais pequenas placas se transformam em pequenos computadores para uso geral (e não somente em sistemas embarcados), o emprego de Java para rodar nestas placas não é somente viável, como também se mostra bem interessante.

 

A primeira coisa que passa pela minha cabeça é que existe uma quantidade enorme de desenvolvedores que possuem proficiência em Java. Essas pessoas têm total condições de desenvolver software em Java para essas placas. E as possibilidades aumentam ...

 

A Oracle, por sua vez, começou a olhar para este novo mundo dos sistemas embarcados. Ela preparou uma linha específica de máquinas virtuais Java voltadas para os sistemas embarcados. É a linha Java Embedded SE. Estas máquinas virtuais são reduzidas em tamanho e otimizadas para operação em algumas GPUs presentes em algums System On Chips de placas abertas de mercado.

 

Achei bem interessante a idéia e resolvi experimentar. E gostei do que vi. Em resumo, ao instalar uma máquina virtual Java em seu sistema embarcado, basta transferir o binário Java feito em sua estação de trabalho para o sistema embarcado que este binário funciona automaticamente.

 

Vou descrever suscintamente o procedimento que eu realizei para fazer meu 'Hello World' Java em minha BeagleBone Black (BBB).

 

O primeiro passo é preparar o sistema operacional: eu usei o Debian em minha BBB.

 

Para instalar o Linux em minha BBB eu usei as orientações do eLinux.org: http://elinux.org/Beagleboard:Debian_On_BeagleBone_Black

 

O segundo é instalar a Java Virtual Machine em minha placa.

 

Para instalar o Java Embedded SE eu me inspirei nas orientações deste link: http://derekmolloy.ie/running-java-applications-on-the-beaglebone-black/

 

Porém, ao 'brigar' um pouco, eu cheguei à conclusão de que o uso do Java é um pouco mais direto e simples do que descreve no  artigo.

 

Eu baixei o arquivo ejre-7u51-fcs-b13-linux-arm-vfp-hflt-client_headless-18_dec_2013.tar.gz presente no site da Oracle. Ele é diferente do arquivo proposto pelo link acima (creio que seja devido à distribuição Linux usada). Este arquivo deve ser baixado para sua estação de trabalho e, em seguida, ser transferido para sua BBB.

 

Uma vez transferido o arquivo, ele deve ser descompactado no diretório /opt de sua BBB. Para completar a instalação, é preciso configurar as variáveis ambiente JAVA_HOME e PATH para o caminho onde se encontra o Java.

 

Para fins deste exemplo, eu configurei manualmente estas variáveis. Para uso contínuo, elas devem ser configuradas para funcionar em tempo de boot.

 

 

Com estas variáveis definidas, checamos a presença do java:

 

 

Com o java habilitado, agora vamos fazer um projeto. Inicialmente eu baixei o Eclipse Standard para Windows 64 bits direto do site do Eclipse. Para instalar, basta descompactar em algum diretório. Como pré-requisito, é preciso ter o Java instalado em seu computador.

 

Instalado o Eclipse, é preciso criar um novo projeto. Para isto, é preciso entrar em File -> New -> Java Project. Uma tela de assistente irá abrir e eu dei o nome do projeto de Hello e cliquei direto em Finish.

 

Logo após criar o projeto, devemos criar a classe principal de nosso projeto. Para isso clicamos com o botão direito sobre src e selecionamos a opção new -> class. A imagem abaixo mostra como esta deve ser configurada.

 

nova_classe

 

Detalhe para selecionar a opção de criar a public static void main(String[] args). Esta é a equivalente à função main de um projeto escrito em C e/ou C++.

 

O código desta classe fica da seguinte forma:

 

 

Para executar este projeto, deve-se ir ao menu Run -> Run. Na janela de console abaixo irá aparecer o texto esperado: Hello World.

 

Validado o projeto, devemos exportá-lo para funcionar também em nossa BBB. Para isso, devemos clicar com o botão direito sobre o projeto, no Eclipse, e escolher a opção Export. Uma tela com as opções disponível aparece na tela. Selecionamos Java -> JAR File. A tela abaixo mostra as configurações seguintes.

 

exportar_projeto

 

Haverá uma próxima tela, na qual você deverá clicar em Next.

 

Na tela final, é preciso indicar qual é a classe que contém o método main(). A configuração está na tela abaixo.

 

exportar_projeto2

 

Após clicar em Finish, um arquivo hello.jar é criado em sua área de trabalho. Este arquivo deve ser transferido para sua BBB.

 

Uma vez transferido para sua BBB, basta executá-lo em sua linha de comando:

 

 

Este artigo tenta apresentar um básico sobre o uso de Java em sistemas embarcados e mostrar, de uma forma bem simplificada, como fazer o seu uso.

 

Mais análises são necessárias, tanto do ponto de vista de desempenho quanto do ponto de vista de capacidade de reuso dos diversos componentes Java presentes em projetos de software para servidores e estações de trabalho. Em caso de viabilidade de utilização em plataformas como a BBB, os projetos de software embarcado poderão desfrutar não somente dos avanços em tecnologias de software que empregam a linguagem Java, como também da ampla gama de desenvolvedores especialistas em Java presentes no mercado. Além, é claro, do fato de permitir a estes desenvolvedores criarem soluções inovadoras em sistemas embarcados, o que antes seria impensável.

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Flavio De Castro Alves Filho
Sócio fundador da Phi Innovations e Professor das disciplinas de sistemas de tempo real e padrões e aplicações de sistemas operacionais do curso de pós graduação em eletrônica embarcada automotiva oferecido pelo SAE (Society of Automotive Engineers).Formado em Engenharia Elétrica pela UNICAMP, com especialização na Ecole Centrale de Lyon, na França, atua há mais de 10 anos em projetos de sistemas embarcados. Trabalhou com projetos de hardware e software embarcado para os setores de pagamento eletrônico, aeroespacial, defesa, segurança, equipamentos médicos, telecomunicações e energia. Atuou em projetos no Brasil e no exterior (França e Alemanha).Começou suas atividades com Linux em 1996 e suas atividades empreendedoras em 2008. É um geek e apaixonado pelo Do-It Yourself (DIY).

Deixe um comentário

avatar
 
  Notificações  
Notificar